我应该在eval()中过滤哪些关键字?

时间:2012-10-02 22:29:18

标签: javascript security eval code-injection jsfiddle

我需要使用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

我还没有开始测试,所以这些只是我最初的想法。

有人对此有经验或意见吗?

谢谢, 戴夫

2 个答案:

答案 0 :(得分:8)

没有办法使这个安全 - 字符[]()+!{}可用于构造任意Javascript代码。

http://patriciopalladino.com/blog/2012/08/09/non-alphanumeric-javascript.html

据我所知,jsFiddle通过在另一个域上的iframe中运行用户生成的代码来工作。它不使用输入过滤。

答案 1 :(得分:5)

几乎任何过滤都可以通过doing this来解决。你将不得不沙盒Javascript。可能的方法包括: