Javascript沙盒

Javascript沙盒,javascript,sandbox,with-statement,Javascript,Sandbox,With Statement,我想让开发人员用Javascript为网站编写一些自定义应用程序,但我想对其进行沙箱处理,这样他们就不能做任何调皮的事情,比如重定向用户,将body display设置为none等。我在Javascript中有一个名称空间,其中包含他们需要的所有函数,因此我想创建一个沙盒将是一个问题: with(Namespace) { //App code goes here where they can only access Namespace.* } 解决这个问题有多容易?还有什么其他方法可以

我想让开发人员用Javascript为网站编写一些自定义应用程序,但我想对其进行沙箱处理,这样他们就不能做任何调皮的事情,比如重定向用户,将body display设置为none等。我在Javascript中有一个名称空间,其中包含他们需要的所有函数,因此我想创建一个沙盒将是一个问题:

with(Namespace) {
    //App code goes here where they can only access Namespace.*
}

解决这个问题有多容易?还有什么其他方法可以做到?宁愿不必对每个提交的应用程序进行审核。

首先想到的是
eval
。他们可以使用它在包装器沙箱之外执行自定义代码。试图包装代码来阻止一个有决心的开发人员是非常困难的


要使用eval.

强制执行沙箱,您必须在执行代码之前检查代码,捕获任何不合法的代码,如果发现,则以某种方式阻止其运行。非常乏味,很长一段时间内容易出错


Facebook至少在其早期平台上做到了这一点,作为一名开发者,我肯定不喜欢它。他们限制了可以使用的本机方法,并在某些方法周围提供了有限的包装。

目前,沙箱代码的选项有:

两者都允许您创建一个安全的环境,其中对全局对象和DOM的访问受到限制


这些项目的主要目的是允许您安全地嵌入小部件和来自第三方的任何web内容。

Google Caja和ADSafe可以限制
eval
:-)事实上,编写这样的代码检查器是不可能的,因为它可以归结为解决停止问题;)(想想以某种奇怪的方式构造
s
并调用
window[s]()
)这是否也会阻止他们修改
对象。prototype