实际上JavaScript中的沙盒是什么?

时间:2011-08-12 17:18:33

标签: javascript sandbox

我理解沙箱一词。但我在JS方面的有限技能无法帮助我理解JS中的沙盒。那么,沙盒究竟是什么?除了安全性,为什么我们需要沙盒JS?

3 个答案:

答案 0 :(得分:2)

javascript沙箱正是你所说的。它限制了脚本可以执行的操作范围。在虚拟化脚本可以调用的资源方面也有好处。这允许沙箱主机封送这些资源以获得更好的性能,并且说停止循环播放的脚本会导致整个浏览器崩溃。

答案 1 :(得分:2)

沙盒是创建一个范围的行为,在该范围内,应用程序的其他任何部分都无法运行(除非有机会)。更具体地说,这通常是一个函数范围,它暴露了实际内容的有限子集。

一个基于沙箱概念的库是YUI3。应用程序的基本单元是YUI实例沙箱:

var Y = YUI(); // creates a configurable YUI instance

// Creates a sandbox for one part of your application,
// including the 'node' module.
Y.use('node', function(Z) {
    // Z is a YUI instance that's specific to this sandbox.
    // Operations inside it are protected from outside code
    // unless exposed explicitly. Any modules you request in
    // use statement will be separately instanced just for
    // this sandbox (in this case, the 'node' module)
    //
    // That way, if another part of your application decides
    // to delete Z.Node (or worse, replace it with a
    // malicious proxy of Z.Node) the code you've written
    // here won't be affected.
});

沙箱的优点主要是为了降低应用程序的复杂性:由于沙箱是不可变的,因此它们更易于推理和验证。它们还可以提高运行时安全性,因为设计良好的沙箱应该能够作为黑匣子运行到页面上运行的其他脚本。它不能防止所有可能的攻击,但它可以防止许多简单攻击。

答案 2 :(得分:0)

沙盒为脚本创建了有限的范围。假设您正在为一个网站编码,那么当您不确定它们是否会按照您的预期完成工作时,为了避免对现场网站进行编辑,值得进行沙盒处理 - 并且如果不进行测试就不可能真正确定。即使它正常工作,如果您有可能对JS进行一系列更改,直到您按照自己喜欢的方式调整它,您可以轻松地破坏任何试图在您更新时使用该网站的人。 / p>

由于沙箱的性质有限,因此在分解物品时更容易分辨出什么是破碎的。