【发布时间】:2012-09-23 20:12:19
【问题描述】:
我需要将 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
我还没有开始测试,所以这些只是我的初步想法。
有人对此有经验或意见吗?
谢谢, 戴夫
【问题讨论】:
-
我不认为 jsfiddle 使用
eval。 -
过滤提交的代码是没有意义的。人们会在黑名单中找到自己的出路。如果有人在字符串文字中使用“eval”,你打算怎么做?您将如何确定哪些字符串用作输出,哪些用于绕过您的沙箱?
-
这里要发生坏事了。
-
让用户运行自定义 Javascript 是一个坏主意。过滤很容易克服。
-
@alcidesqueiroz 这如何解决任何问题?
标签: javascript security eval code-injection jsfiddle