快速问题。 JavaScript中的Eval是不安全的,不是吗?我有一个JSON对象作为字符串,我需要把它变成一个实际的对象,所以我可以获取数据:
function PopulateSeriesFields(result)
{
data = eval('(' + result + ')');
var myFakeExample = data.exampleType
}
如果它有助于我使用jQuery中的$ .ajax方法。
由于
答案 0 :(得分:25)
嗯,安全与否,当你使用jQuery时,你最好使用$.getJSON()方法,而不是$ .ajax():
$.getJSON(url, function(data){
alert(data.exampleType);
});
当您只与自己的服务器通信时, eval()
通常被认为是安全的JSON解析,尤其是当您在服务器端使用一个好的JSON库时,它保证生成的JSON不会包含任何令人讨厌的内容。
即使是JSON的作者Douglas Crockford也表示,除了解析JSON之外,你不应该在代码中的任何地方使用eval()
。请参阅他的书JavaScript: The Good Parts
答案 1 :(得分:19)
您应该使用JSON并编写JSON.parse。
“手动”解析速度太慢,因此库中的JSON.parse实现会检查内容然后最终使用eval,因此它是still unsafe。但是,如果您使用的是较新的浏览器(IE8或Firefox),则库代码实际上并未执行。相反,原生浏览器支持会启动,然后您就安全了。
答案 2 :(得分:6)
如果你不相信来源,那么你是正确的...... eval是不安全的。它可以用来将代码注入你的页面。
查看此链接以获得更安全的替代方案:
该页面解释了为什么eval不安全,并提供了指向页面底部的JSON解析器的链接。
答案 3 :(得分:5)
不安全?这取决于你是否可以信任这些数据。
如果您可以相信该字符串将是JSON(并且不包括,例如,函数),那么它是安全的。
那就是说 - 如果你使用jQuery,为什么要手动执行此操作?使用dataType选项指定它是JSON并让库为您处理。
答案 4 :(得分:4)
如果您使用的是jQuery,从版本1.4.1开始,您可以使用jQuery.parseJSON()
答案 5 :(得分:3)
使用JavaScript的eval
是不安全的。因为JSON只是JavaScript的一个子集,但JavaScript的eval
允许任何有效的JavaScript。
使用真正的JSON解析器,例如JSON parser from json.org。
答案 6 :(得分:3)
评估代码的替代方法是手动解析它。它并不像听起来那么难,但在运行时却相当重。 You can read about it here.
需要注意的重要部分是评估JSON本身并不安全。只要你相信来源不要球。这包括确保传入JSON编码器的内容被正确转义(以阻止用户在用户机器上执行代码的流程两步)。
答案 7 :(得分:2)
你可以这样试试
var object = new Function("return " + jsonString)()
答案 8 :(得分:0)
另一个很好的选择是YUI: http://yuilibrary.com/yui/docs/json/
所以你的代码应该是这样的:
Y.JSON.parse('{"id": 15, "name": "something"}');