簡體   English   中英

將eval()轉換為JSON.parse

[英]Convert eval() to JSON.parse

對於基於XSS的攻擊,我正在經歷使用eval()帶來的不良影響。 我需要保護一段代碼以防止可能的XSS攻擊,而我認為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嗎?

只需將該行替換為:

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

只要響應是正確的JSON,就可以正常工作。

假設響應是行為良好的JSON,您將可以簡單地將eval行替換為:

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

但是要當心:與eval可以接受的Javascript對象相比,JSON解析器在接受的值上有嚴格的限制。 例如,

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

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

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

將導致解析錯誤,因為JSON規范[0]要求將對象鍵提供為雙引號字符串:

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

如果服務器配置正確,通常將輸出兼容的JSON,但這是需要注意的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM