我正在经历使用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?
答案 0 :(得分:4)
只需用以下代码替换该行:
var jsonData = JSON.parse(request.responseText);
如果响应是正确的JSON,这应该可行。
答案 1 :(得分:1)
假设响应是表现良好的JSON,您可以简单地用以下代码替换eval行:
var jsonData = JSON.parse(request.responseText);
请注意:与eval接受的Javascript对象相比,JSON解析器在它将接受的值中具有非常严格的限制。例如,
var jsVal = eval("({a:3})");
将导致Object {a:3},而
var jsonVal = JSON.parse("{a:3}");
将导致解析错误,因为JSON规范[0]要求将对象键作为双引号字符串提供:
var jsonVal = JSON.parse('{"a":3}');
如果服务器配置正确,它通常会输出兼容的JSON,但需要注意。