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

Dav*_*art 0 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
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢,戴夫

dus*_*uff 8

没有办法使这个安全 - 角色[]()+!{}可以用来构造任何任意的Javascript代码.

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

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


Viv*_*ath 5

几乎任何过滤都可以通过这样做来解决.你将不得不沙盒Javascript.可能的方法包括: