当前位置:  开发笔记 > 编程语言 > 正文

Eval是邪恶的...那么我应该使用什么呢?

如何解决《Eval是邪恶的那么我应该使用什么呢?》经验,为你挑选了3个好方法。

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

所以这就是问题所在.无论我如何努力消毒输入,我宁愿不使用eval()函数.我已经检查了谷歌如何使用"没有评估的AJAX中的JSON",并且已经运行了很多不同的方法......

我应该使用哪一个?是否有标准的,经过验证的安全方法?



1> cobbal..:

json.org有一个很好的JavaScript库

简单用法:

JSON.parse('[{"some":"json"}]');
JSON.stringify([{some:'json'}]);

编辑:正如评论中所指出的,如果你查看它的来源,它会使用eval(尽管它看起来首先要消毒)

要完全避免它,请查看json_parse或json-sans-eval

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


它也使用eval.
它仅将eval用作本机不支持JSON对象的浏览器的后备,如果这不具有"解析"功能.

2> bobince..:

是否有标准的,经过验证的安全方法?

在即将推出的ECMAScript 3.1版JavaScript:JSON.parse中,有一种提议的标准方法.

这将在IE8的支持,火狐3.1/3.5和最有可能在今后其他流行的浏览器.在此期间,您可以退回或专门使用eval().邪恶可能会也可能不会; 当然它会比JSON.parse慢.但这是今天解析JSON的常用方法.

如果攻击者能够将狡猾的JavaScript注入您通过JSON吐出的内容,那么您需要担心的问题比eval-evil更大.



3> 小智..:

我会说,一旦输入被消毒,eval就是最好的方法.如果您的服务器遭到入侵,人们将无论如何都能够将他们想要的任何脚本发送给客户端.所以放一个评估并不是一个很大的安全风险.如果您担心人们在到达客户端之前操纵数据包,那么可以再次修改脚本本身.

不要担心eval.但请确保将其包装在try ... catch块中,这样如果您的JSON被破坏,您的用户就不会收到JS错误.

:)

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有