JavaScript 沙盒

6

我希望开发人员能够使用Javascript编写一些定制的应用程序,但我希望将其沙盒化,以防止他们做出任何不良行为,例如重定向用户、设置body显示为none等等。我在Javascript中有一个命名空间,其中包含所有他们需要的函数,因此我认为创建沙盒只需执行以下操作:

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

有多容易绕过这个限制?还有哪些方法可以使用?不想每次都审核提交的应用。


参见:https://dev59.com/EmEh5IYBdhLWcg3wXCZL - Azmisov
3个回答

8
目前沙箱代码的选项有: 这两个选项都允许您创建一个“安全环境”,其中全局对象和DOM的访问受到限制。
这些项目的主要目的是让您安全地嵌入来自第三方的小部件和任何网页内容。

它是否也防止了它们修改Object.prototype - mik01aj

2

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

链接 至使用 eval 的相关问题。


1
Google Caja和ADSafe可以限制eval :-) - Christian C. Salvadó

1
要强制实施沙箱,你必须在代码执行之前检查它,捕获任何不合法的代码,如果发现了,就要设法阻止其运行。这一过程非常繁琐且容易出错,很长一段时间内都存在这个问题。
Facebook 至少在早期平台上采取了这种做法,作为一名开发者,我绝对不喜欢这样。他们限制了可以使用的本地方法,并提供了一些有限的封装方式。

1
事实上,编写这样的代码检查器是不可能的,因为它可以归结为解决停机问题 ;)(想象一下以某种奇怪的方式构造s并调用window[s]() - mik01aj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接