developer tip

JSON.parse 대 eval ()

copycodes 2020. 9. 7. 08:22
반응형

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

반응형