JSON.parse 대 eval ()
내 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
이 예를 참조하십시오 .
를 사용하여 JSON을 구문 분석하면 구문 분석되는 eval
문자열에 모든 것이 포함되도록 허용하므로 데이터 집합이되는 대신 함수 호출 등을 실행하는 자신을 찾을 수 있습니다.
또한 JSON parse
은 datetimes와 같은 특정 값을 처리하는 방법을 지정할 수있는 추가 매개 변수 인 reviver를 허용합니다 ( 여기 인라인 문서에서 자세한 정보 및 예제 참조 ).
JSON은 JavaScript의 일부일뿐입니다. 그러나 eval
JSON 인 부분 집합 만이 아니라 전체 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 |