당신은 또한 사용할 수 eval()
있지만 JSON.parse()
더 안전하고 쉬운 방법입니다, 왜 당신은 하시겠습니까?
좋은 일
var yourJsonObject = JSON.parse(json_as_text);
왜 당신이 선호하는 이유는 없습니다 eval
. 응용 프로그램이 위험에 처할뿐입니다.
즉 말했다 -이 입니다 도 가능합니다.
나쁜-또한 작동
var yourJsonObject = eval(json_as_text);
왜 eval
나쁜 생각입니까?
다음 예를 고려하십시오.
일부 타사 또는 사용자가 JSON 문자열 데이터를 제공했습니다.
var json = `
[{
"adjacencies": [
{
"nodeTo": function(){
return "delete server files - you have been hacked!";
}(),
"nodeFrom": "graphnode1",
"data": {
"$color": "#557EAA"
}
}
],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode1",
"name": "graphnode1"
},{
"adjacencies": [],
"data": {
"$color": "#EBB056",
"$type": "triangle",
"$dim": 9
},
"id": "graphnode2",
"name": "graphnode2"
}]
`;
서버 측 스크립트는 해당 데이터를 처리합니다.
사용 JSON.parse
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = JSON.parse(json)[0].adjacencies[0].nodeTo;
}
던질 것입니다 :
Uncaught SyntaxError: Unexpected token u in JSON at position X.
기능이 실행되지 않습니다.
당신은 안전합니다.
사용 eval()
:
window.onload = function(){
var placeholder = document.getElementById('placeholder1');
placeholder.innerHTML = eval(json)[0].adjacencies[0].nodeTo;
}
함수를 실행하고 텍스트를 반환합니다.
그 무해한 기능을 웹 사이트 폴더에서 파일을 제거하는 기능으로 바꾸면 해킹당한 것입니다. 이 예제에서는 오류 / 경고가 발생하지 않습니다.
당신은 안전하지 않습니다.
JSON 텍스트 문자열을 조작하여 서버에서 실행될 함수로 작동 할 수있었습니다.
eval(JSON)[0].adjacencies[0].nodeTo
JSON 문자열을 처리 할 것으로 예상되지만 실제로는 서버에서 함수를 실행했습니다.
eval()
함수로 전달하기 전에 모든 사용자 제공 데이터를 서버 측에서 확인 하지만 JSON 구문 분석을 위해 기본 제공 도구를 사용 하여이 모든 문제와 위험을 피하는 것이 어떻습니까?