我需要使用eval()来构建我正在构建的基于JavaScript的Web应用程序。
这样做的原因是我想让人们编写自己的文件存储功能,并且可以在网站上重新使用,然后需要再次使用它们。按照jsFiddle的思路思考。
代码将被运行并被评估,或者将作为脚本标记插入。无论哪种方式,它都会让恶意用户开放JavaScript注入网站。因此,我打算过滤提交的代码,或者当用户加载另一个用户的脚本时,会有一条警告消息,用户在继续之前应首先阅读/检查脚本。
到目前为止,我希望过滤/警告以下关键字:
eval
execScript
script
window.*
setInterval
setTimeout
alert
confirm
prompt
document.*
write
innerHTML
insertAdjacentHTML
createElement
appendChild
setAttribute
form.*
submit
XMLHttpRequest
jQuery.*
ajax
base64encode
base64decode
我还没有开始测试,所以这些只是我最初的想法。
有人对此有经验或意见吗?
谢谢, 戴夫
答案 0 :(得分:8)
没有办法使这个安全 - 字符[]()+!{}
可用于构造任意Javascript代码。
http://patriciopalladino.com/blog/2012/08/09/non-alphanumeric-javascript.html
据我所知,jsFiddle通过在另一个域上的iframe中运行用户生成的代码来工作。它不使用输入过滤。
答案 1 :(得分:5)
几乎任何过滤都可以通过doing this来解决。你将不得不沙盒Javascript。可能的方法包括: