내 Spider Sense는 eval()
들어오는 JSON을 구문 분석 하는 데 사용 하는 것은 나쁜 생각 이라고 경고합니다 . 나는 JSON.parse()
브라우저 특정 기능이 아닌 JavaScript의 일부라고 가정하는 것이 더 안전 한지 궁금합니다 .
답변
다음을 사용하는 경우 공격에 더 취약합니다eval
. JSON은 Javascript의 하위 집합이고 json.parse는 JSON을 구문 분석하는 반면 eval
모든 JS 표현식에 대한 문을 열어 둡니다.
답변
JSON.parse
사용 가능성이 가장 높은 모든 구현eval()
JSON.parse
Douglas 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
이 예를 참조하십시오 .