快速提问。JavaScript 中的 eval 是不安全的,不是吗?我有一个 JSON 对象作为字符串,我需要将其转换为实际对象,以便获取数据:
function PopulateSeriesFields(result)
{
data = eval('(' + result + ')');
var myFakeExample = data.exampleType
}
如果有帮助,我将使用 jQuery 中的 $.ajax 方法。
谢谢
快速提问。JavaScript 中的 eval 是不安全的,不是吗?我有一个 JSON 对象作为字符串,我需要将其转换为实际对象,以便获取数据:
function PopulateSeriesFields(result)
{
data = eval('(' + result + ')');
var myFakeExample = data.exampleType
}
如果有帮助,我将使用 jQuery 中的 $.ajax 方法。
谢谢
好吧,不管安全与否,当你使用 jQuery 时,最好使用$.getJSON()方法,而不是 $.ajax():
$.getJSON(url, function(data){
alert(data.exampleType);
});
eval()
当您仅与自己的服务器通信时,尤其是当您在服务器端使用良好的 JSON 库以保证生成的 JSON 不会包含任何令人讨厌的内容时,通常认为 JSON 解析是安全的。
甚至 JSON 的作者 Douglas Crockford 也说过eval()
,除了解析 JSON 之外,你不应该在代码中的任何地方使用。请参阅他的书JavaScript: The Good Parts中的相应部分
您应该使用JSON并编写 JSON.parse。
“手动”解析太慢了,所以库中的 JSON.parse 实现会检查内容,然后最终使用 eval,所以它仍然是 unsafe。但是,如果您使用的是较新的浏览器(IE8 或 Firefox),则库代码不会实际执行。相反,本机浏览器支持启动,然后您就安全了。
如果您不能信任来源,那么您是正确的……eval 是不安全的。它可用于将代码注入您的页面。
查看此链接以获得更安全的替代方案:
该页面解释了 eval 不安全的原因,并在页面底部提供了指向 JSON 解析器的链接。
不安全?这取决于您是否可以信任数据。
如果您可以相信该字符串将是 JSON(并且不包括例如函数),那么它是安全的。
也就是说 - 如果您使用的是 jQuery,为什么要手动执行此操作?使用dataType选项指定它是 JSON 并让库为您处理它。
如果您使用的是 jQuery,则从 1.4.1 版开始,您可以使用 jQuery.parseJSON()
使用 JavaScripteval
是不安全的。因为 JSON 只是 JavaScript 的一个子集,但 JavaScripteval
允许任何有效的 JavaScript。
请改用真正的 JSON 解析器,例如 json.org中的 JSON 解析器。
评估代码的替代方法是手动解析它。它并不像听起来那么难,但在运行时要重得多。你可以在这里读到它。
需要注意的重要部分是评估 JSON 并不是天生不安全的。只要您相信消息来源,不要把事情搞砸。这包括确保传递到 JSON 编码器的内容被正确转义(以阻止人们在用户机器上执行代码的 2 个步骤)。
你可以试试这样
var object = new Function("return " + jsonString)()
另一个不错的选择是 YUI:http: //yuilibrary.com/yui/docs/json/
所以你的代码会是这样的:
Y.JSON.parse('{"id": 15, "name": "something"}');