首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >伊瓦尔是邪恶的。那么我应该用什么来代替呢?

伊瓦尔是邪恶的。那么我应该用什么来代替呢?
EN

Stack Overflow用户
提问于 2009-03-14 19:55:25
回答 9查看 18K关注 0票数 22

ajax请求返回一个标准的JSON数组,其中填充了我的用户的输入。输入已经过清理,使用eval()函数,我可以轻松地创建javascript对象并更新我的页面...

这就是问题所在。无论我多么努力地清理输入,我都不愿使用eval()函数。我在谷歌上查过如何使用"JSON in AJAX without eval“,并且运行了一堆不同的方法……

我应该使用哪一个?有没有一种标准的、经过验证的安全方法来做到这一点?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-03-14 20:08:04

json.org有一个很好的javascript library

简单用法:

代码语言:javascript
复制
JSON.parse('[{"some":"json"}]');
JSON.stringify([{some:'json'}]);

编辑:正如评论中所指出的,如果你查看它的源代码,它将使用eval (尽管它看起来首先是经过清理的)

要完全避免这种情况,请查看json_parsejson-sans-eval

json2.js是不安全的,json_parse.js很慢,json-sans-eval.js是非验证的

票数 22
EN

Stack Overflow用户

发布于 2009-03-14 20:09:38

有没有一种标准的、经过验证的安全方法来做到这一点?

在即将发布的ECMAScript 3.1版本的JavaScript中,有一种建议的标准方法来实现这一点:JSON.parse

它将在IE8、Firefox3.1/3.5以及未来最有可能出现的其他流行浏览器中得到支持。同时,您可以退回到eval(),或者专门使用eval()。它可能是邪恶的,也可能不是;它肯定会比JSON.parse慢。但这是目前解析JSON的常用方法。

如果攻击者能够将恶意JavaScript注入到您通过JSON输出的内容中,那么您需要担心的问题就比“求值是恶”更大了。

票数 11
EN

Stack Overflow用户

发布于 2009-03-14 19:58:17

我想说,一旦输入被清理干净,eval就是最好的选择。如果您的服务器被攻破,人们将能够向客户端发送任何他们想要的脚本。所以设置一个eval并不是一个很大的安全风险。如果您担心人们在数据包到达客户端之前对其进行操作,那么脚本本身也可以修改。

不要担心eval。但是一定要把它包装在一个try...catch块中,这样如果你的JSON被破坏了,你的用户就不会收到JS错误。

:)

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/646597

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档