2017-04-11 4 views
0

XSS 기반 공격과 관련하여 eval()을 사용하는 부작용을 겪고있었습니다. 가능한 XSS 공격으로부터 보호해야하는 코드가 있으며 JSON.parse()가 제대로 작동해야한다고 생각합니다.eval()을 JSON.parse로 변환

var request = new XMLHttpRequest(); 
var url = encDataPath + "/jcr:content/metadata.json?_charset_=utf-8"; 
url = Granite.HTTP.externalize(url); 
request.open("GET", url ,false); 
request.send(null); 

var jsonData =eval("(" + request.responseText + ")"); // <-- here 
var assetTitle = jsonData["dc:title"]; 
var mimetype = jsonData["dc:format"]; 

사람은 내가 JSON.parse에 eval() (jsonData에 대한)을 변경하는 방법을 조언 할 수 있습니까?

+1

이 질문 자체가 답을 것 같다 ...? – Liam

+0

나는 왜 당신이 한 가지를 다른 것으로 대체 할 것인지 묻는 이유를 이해하지 못한다. 그리고 [xss] 및 [code-injection]에서 태그가 지정되는 이유는 무엇입니까? 위어드. –

답변

4

그냥 함께 그 라인을 교체 :

var jsonData = JSON.parse(request.responseText); 

응답이 적절한 JSON 제공한다, 이것은 단지 작동합니다. 의 JSON 파서 그것을 받아 들일 것입니다 값이 매우 제한적입니다 :

var jsonData = JSON.parse(request.responseText); 

그래도 조심 :

1

당신은 단순히으로 평가 라인을 대체 할 수있을 것, 응답이 JSON 잘 행동된다고 가정 eval이 받아 들일 자바 객체와 비교할 때. [0] JSON 사양 객체 키가 필요하므로,

반면
var jsonVal = JSON.parse("{a:3}"); 

는 해석 에러가 발생할 것이다 이중으로 제공 될 : ​​예를 들어,

var jsVal = eval("({a:3})"); 

오브젝트 {3} 초래할 것 따옴표 붙은 문자열 :

var jsonVal = JSON.parse('{"a":3}'); 

서버가 올바르게 구성되어 있으면 일반적으로 호환되는 JSON이 출력되지만 잘 알고 있어야합니다.

[0] http://www.json.org/

+0

url :'/ jcr : content/metadata.json'을보십시오. 나는 응답이 유효한 JSON이라고 생각하는 것이 안전하다고 생각한다. – Cerbrus

관련 문제