2017-04-11 43 views
0

我正在審查使用eval()方法對基於XSS的攻擊造成的不良影響。有一段代碼需要防範可能的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"]; 

能有人建議我如何可以改變eval()(用於jsonData)到JSON.parse?

+1

這個問題似乎回答自己......? – Liam

+0

我不明白你爲什麼要問如何用另一個東西代替另一個東西,看起來太明顯了,下面的答案。爲什麼在[xss]和[code-injection]下標記?奇怪的。 –

回答

4

只是替換該行:

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

提供的響應是正確的JSON,這應該只是工作。

1

假設響應乖巧JSON,你將能夠簡單地更換EVAL行:

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

要小心的是:在JSON解析器,它接受的價值觀非常嚴格,與eval會接受的Javascript對象相比較。例如,

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

將導致對象{A:3},而

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

將導致一個解析錯誤,因爲JSON規範[0]需要對象鍵將被提供作爲雙-quoted字符串:

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

如果服務器配置正確,它通常會輸出標準的JSON,但它是一個需要注意的。

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

+0

看看url:'/ jcr:content/metadata.json'。我認爲這是一個相當安全的選擇,答案是有效的JSON。 – Cerbrus

相關問題