我正在经历对基于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() (for jsonData)更改为JSON.parse吗?
发布于 2017-04-11 10:09:50
只需将这一行改为:
var jsonData = JSON.parse(request.responseText);如果响应是正确的JSON,这应该会正常工作。
发布于 2017-04-11 10:17:03
假设响应是行为良好的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规范要求以双引号字符串的形式提供对象键:
var jsonVal = JSON.parse('{"a":3}');如果服务器配置得当,它通常会输出符合JSON的JSON,但这是需要注意的。
https://stackoverflow.com/questions/43342911
复制相似问题