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

Javascript 我应该在eval()中过滤哪些关键字?,javascript,security,eval,code-injection,jsfiddle,Javascript,Security,Eval,Code Injection,Jsfiddle,我需要为我正在构建的基于JavaScript的web应用程序使用eval 这样做的原因是,我想让人们编写他们自己的函数,这些函数被存储为文本,当需要再次使用它们时,可以在站点上重复使用。按照JSFIDLE的思路思考 代码将被运行和评估,或者作为脚本标记插入。无论哪种方式,它都会让恶意用户向网站注入JavaScript。因此,我计划过滤提交的代码,或者当用户加载另一个用户的脚本时,会显示一条警告消息,提示用户在继续之前应首先读取/检查脚本 到目前为止,我希望筛选/警告以下关键字: eval exe

我需要为我正在构建的基于JavaScript的web应用程序使用eval

这样做的原因是,我想让人们编写他们自己的函数,这些函数被存储为文本,当需要再次使用它们时,可以在站点上重复使用。按照JSFIDLE的思路思考

代码将被运行和评估,或者作为脚本标记插入。无论哪种方式,它都会让恶意用户向网站注入JavaScript。因此,我计划过滤提交的代码,或者当用户加载另一个用户的脚本时,会显示一条警告消息,提示用户在继续之前应首先读取/检查脚本

到目前为止,我希望筛选/警告以下关键字:

eval
execScript

script

window.*
setInterval
setTimeout
alert
confirm
prompt

document.*
write
innerHTML
insertAdjacentHTML
createElement
appendChild
setAttribute

form.*
submit

XMLHttpRequest

jQuery.*
ajax

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

有人对此有经验或看法吗

谢谢,
Dave

没有办法保证安全-字符[]+!{}可用于构造任意Javascript代码


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

几乎任何过滤都可以通过以下方式实现。您必须对Javascript进行沙箱处理。可能的办法包括:


我不认为JSFIDLE使用eval。过滤提交的代码将毫无意义。人们会绕过黑名单。如果有人在字符串文本中使用eval,您打算怎么做?您将如何确定哪些字符串用作输出,哪些字符串用于绕过沙箱?这里可能会发生一些不好的事情。让用户运行自定义Javascript是一个不好的主意。过滤是很容易克服的。@Alcidesqueroz这是怎么解决问题的呢?是的-我在发布后就意识到了这一点。这篇文章中有很多关于沙盒JavaScript的精彩回复。谢谢,你告诉我了: