将 eval() 转换为 JSON.parse
Convert eval() to JSON.parse
我正在研究使用 eval() 对基于 XSS 的攻击的不良影响。我需要一段代码来防止可能的 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,但需要注意这一点。
我正在研究使用 eval() 对基于 XSS 的攻击的不良影响。我需要一段代码来防止可能的 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,但需要注意这一点。