【问题标题】:what actually is sandboxing in JavaScript?JavaScript 中的沙盒到底是什么?
【发布时间】:2011-08-12 17:18:32
【问题描述】:

我理解沙盒这个词。但是我有限的 JS 技能无法帮助我理解 JS 中的沙盒是什么。那么,究竟什么是沙盒?除了安全,为什么还要沙箱 JS?

【问题讨论】:

  • 为什么会有安全之外的原因?重点是不允许来自网络的任意代码影响浏览器之外的任何内容。
  • @Wooble 请参阅以下答案:除了安全性之外,还有一些额外的好处。我可以补充一下,这只是一个很好的设计,因为 JavaScript 对全局的东西太糟糕了。
  • @Šime Vidas,是的,目前只有浏览器

标签: javascript sandbox


【解决方案1】:

javascript 沙盒完全按照您所说的进行。它限制了脚本可以执行的范围。在虚拟化脚本可以调用的资源方面也有好处。这使沙盒主机可以整理这些资源以获得更好的性能,并停止无限循环脚本导致整个浏览器崩溃。

【讨论】:

    【解决方案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.
    });
    

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

    【讨论】:

    • 我的宽带不喜欢这个问题,所以被阻止了 :(,感谢您提供详细信息,在 jquery 中查看您的示例我可以做到这一点$(function(){/*some code here*/}); 和您说的一样吗?
    • 不完全,但很接近。最大的区别是,如果我有一个 YUI 实例,其中我使用模块 AB,而模块 B 恰好修改模块 A(添加其他属性或更改其行为),我可以稍后创建一个仅使用模块A 获取未修改版本的新 YUI 实例。这在 jQuery 中几乎是不可能的(据我所知,无论如何)。
    【解决方案3】:

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

    由于沙盒的有限性质,当您破坏事物时,也更容易分辨出什么是破坏的。

    【讨论】:

      猜你喜欢
      • 2011-09-08
      • 1970-01-01
      • 2012-06-11
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-19
      • 1970-01-01
      相关资源
      最近更新 更多