JSON.parse 대 eval ()
내 Spider Sense는 eval()들어오는 JSON을 구문 분석 하는 데 사용 하는 것은 나쁜 생각 이라고 경고합니다 . 나는 JSON.parse()브라우저 특정 기능이 아닌 JavaScript의 일부라고 가정하는 것이 더 안전 한지 궁금합니다 .
다음을 사용하는 경우 공격에 더 취약합니다eval . JSON은 Javascript의 하위 집합이고 json.parse는 JSON을 구문 분석하는 반면 eval모든 JS 표현식에 대한 문을 열어 둡니다.
JSON.parse사용 가능성이 가장 높은 모든 구현eval()
JSON.parseDouglas Crockford의 솔루션을 기반으로 합니다. 497 번 라인에서eval() 바로 사용합니다 .
// In the third stage we use the eval function to compile the text into a
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// in JavaScript: it can begin a block or an object literal. We wrap the text
// in parens to eliminate the ambiguity.
j = eval('(' + text + ')');
의 장점은 JSON.parse인수가 올바른 JSON 구문인지 확인한다는 것입니다.
모든 브라우저가 기본 JSON을 지원하는 것은 아니므로 eval()JSON 문자열 을 사용해야 하는 경우 가 있습니다 . http://json.org의 JSON 파서를 사용하면 모든 것을 훨씬 쉽게 처리 할 수 있습니다.
Eval() 악하지만 일부 브라우저에 대해서는 필요한 악이지만 피할 수있는 곳에서는 그렇게 !!!!!
JSON.parse ()와 eval ()이 받아들이는 것에는 차이가 있습니다. 이것에 대해 평가 해보십시오.
var x = "{\"shoppingCartName \ ": \"shopping_cart : 2000 \ "}"
eval(x) //won't work
JSON.parse(x) //does work
이 예를 참조하십시오 .
를 사용하여 JSON을 구문 분석하면 구문 분석되는 eval문자열에 모든 것이 포함되도록 허용하므로 데이터 집합이되는 대신 함수 호출 등을 실행하는 자신을 찾을 수 있습니다.
또한 JSON parse은 datetimes와 같은 특정 값을 처리하는 방법을 지정할 수있는 추가 매개 변수 인 reviver를 허용합니다 ( 여기 인라인 문서에서 자세한 정보 및 예제 참조 ).
JSON은 JavaScript의 일부일뿐입니다. 그러나 evalJSON 인 부분 집합 만이 아니라 전체 JavaScript 언어를 평가합니다.
참고 URL : https://stackoverflow.com/questions/1843343/json-parse-vs-eval
'developer tip' 카테고리의 다른 글
| 실행 파일을 실행하는 데 필요한 .NET Framework 버전을 확인하는 방법은 무엇입니까? (0) | 2020.09.07 |
|---|---|
| 임의 정밀도 산술 설명 (0) | 2020.09.07 |
| 서비스 시작을위한 Android onCreate 또는 onStartCommand (0) | 2020.09.07 |
| async / await와 함께 RestSharp를 사용하는 방법 (0) | 2020.09.07 |
| 약속, 추가 매개 변수를 전달한 다음 연결 (0) | 2020.09.07 |