都说eval()是不安全的,还有new Function()也是不安全的,啥脚本注入来着。但是该如何解决这种不安全的问题呢?我搜索了一下,貌似是啥脚本库之类的,但是大部分都是在分析他们的使用方法。所以请哪位研究过的大神,分析下该如何解决安全问题,或者说提供个脚本库参考下,^_^
只要你不使用eval执行用户输入的内容,问题不大。你先了解下XSS攻击。
感谢你的回答,但是像楼上我所说的,要转换字符串为json的情况呢?
@流炎飞雪: 考虑使用JSON.parse转换
@幻天芒: 感谢你的回答,这个有考虑过,但是会发现是不兼容IE7以下浏览器的,我看过jquery实现的兼容,在不兼容的情况下,也是通过new Function()来实现的。
@流炎飞雪: 可控的eval,new Function,是可以使用的。如果是IE低版本,你可以使用json2
@幻天芒: 感谢你的回答
怎么个不安全法.讲清楚点
首先感谢你的关注,至于如何不安全,我也没有见过,但是不管是网上还是哪里,都会有所耳闻,以我个人的理解应该是这样的。
比如说以下是从php所提供的接口中获取的数据信息。
var jsonStr = '{"a":1,"b":2,"c":function(){alert(1);}()}';
其中的值都是用户提供的信息。
为了追加到页面,显示为用户,那么得转换成json形式。
var json = eval("("+jsonStr+")"); //或者 var json = new Function("return"+jsonStr)();
结果是页面会alert(1);
换句话说,如果那个函数中不是alert(1);是打开某个链接,或者运行啥程序之类的,当然具体的操作我是不懂了,只是类似的。这样就感觉会不安全了,页面可以有用户操作了。
以上是我的理解。