【发布时间】:2014-10-25 10:45:19
【问题描述】:
我需要运行一个完全由用户编写的 Javascript 函数。我给他提供了一个骨架,但细节由他指定,例如
function main(model, console) {
// the user can enter anything here
// ideally, he would only be allowed to
// use the methods that "model" and "console" provide, e.g.
var item = model.getItems();
console.log("Found " + item.length + " items.");
}
为了使应用程序正常工作,用户只需要访问参数的方法和属性(他明确地不需要文档或窗口访问或发送XMLHttpRequests)。
我已经阅读了几篇关于eval() 函数以及如何使用它来运行代码的文章。我还阅读了有关 StackOverflow 的其他文章(how jsFiddle runs code、eval in general 等),但我仍然不确定如何正确执行。
首先:eval()的真正问题是什么?攻击者可以做什么以及如何防止它(使用白名单、黑名单或用户输入清理库)?
谁能深入解释一下 jsFiddle 和此类网站如何执行用户输入?
【问题讨论】:
-
恶意用户可以使用
eval获取您应用程序的 cookie(如用户会话令牌,这将允许他们模拟登录用户)、客户端内存中保存的任何状态并生成请求从您的服务器获取更多状态。它可以将任何数据发布到另一台服务器。简而言之,他们可以拥有您的应用程序。 -
jsfiddle 将用户的文档放在一个 IFRAME 中,并在不同的域中运行它(
fiddle.jshell.net而不是jsfiddle.net),因此它无法访问 jsfiddle 应用程序。 -
你能详细解释一下吗?他们如何沟通?这种方法有什么局限性?
标签: javascript security eval jsfiddle