快速提问。JavaScript 中的 Eval 不安全,不是吗?我有一个字符串形式的 JSON 对象,我需要将其转换为实际对象,以便获取数据:

function PopulateSeriesFields(result) 
{
    data = eval('(' + result + ')');
    var myFakeExample = data.exampleType
}

如果有帮助的话,我正在使用 jQuery 的 $.ajax 方法。

谢谢

有帮助吗?

解决方案

好了,安全与否,当你使用jQuery,你最好使用 $ .getJSON()方法,而不是$就():

$.getJSON(url, function(data){
    alert(data.exampleType);
});

eval()通常被认为是JSON解析安全的,当你只用自己的服务器和通信尤其是当你使用服务器端的一个很好的JSON库,生成JSON将不包含任何讨厌的保证。

即使道格拉斯Crockford的,JSON的作者,他说,你不应该在你的代码的任何地方使用eval(),除了解析JSON。看到他的书的 JavaScript的:好的部件

其他提示

你应该使用 JSON 并编写 JSON.parse。

“手动”解析太慢,因此库中的 JSON.parse 实现会检查内容,然后最终使用 eval,所以它是 仍然不安全. 。但是,如果您使用的是较新的浏览器(IE8 或 Firefox),则库代码实际上不会被执行。反而, 本机浏览器支持 启动,然后你就安全了。

阅读更多 这里这里.

如果你不能信任的来源,那么你是正确的... EVAL是不安全的。它可以用来将代码注入到您的网页。

查看此链接,更安全的替代:

JSON在Javascript

在页解释了为什么EVAL是不安全的,并在页面底部提供了一个链接到一个JSON解析器。

不安全?这取决于你是否能信任的数据。

如果您可以相信的是,字符串将是JSON(并且将不包括,例如,函数),那么它是安全的。

这是说 - 如果你正在使用jQuery,你为什么要手工做这个?使用的dataType 选项来指定,它是JSON,让图书馆照顾它。

如果你正在使用jQuery,作为1.4.1版本可以使用jQuery.parseJSON()

看到这个答案:安全的json与jQuery解析

使用JavaScript的eval是不安全的。由于JSON只是JavaScript,但JavaScript的eval的子集,允许任何有效的JavaScript。

这json.org 代替使用一个真实的JSON解析器像 JSON解析器。

要评估的代码另一种方法是手动解析它。这不是很难,因为它的声音,但它在运行时重了不少。 你可以阅读在这里。

重要的部分要注意的是评估JSON不具有固有的不安全的。只要你信任的来源不是球的事情了。这包括确保东西传递到JSON编码器的正确转义(停止人2步执行了你的用户的机器码流)。

您可以尝试像这样

var object = new Function("return " + jsonString)()

另一个重要方法是锐: http://yuilibrary.com/yui/docs/json/

所以,你的代码将是这样的:

Y.JSON.parse('{"id": 15, "name": "something"}');
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top