0

我需要将 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

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

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

谢谢,戴夫

4

2 回答 2

8

没有办法保证这个安全——这些字符[]()+!{}可以用来构造任意的 Javascript 代码。

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

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

于 2012-10-02T22:34:51.533 回答
5

几乎任何过滤都可以通过这样做来解决。您将不得不对 Javascript 进行沙箱处理。可能的方法包括:

于 2012-10-02T22:37:19.147 回答