【问题标题】:Implement a javascript sandbox using new Harmony direct proxies使用新的 Harmony 直接代理实现 javascript 沙箱
【发布时间】:2013-05-29 10:29:11
【问题描述】:

我发现this 的要点是使用withthe Harmony direct proxies 为第3 方代码实现沙箱。它有多大用处?是否可以使用代理实现适当的 javascript 沙箱?这种方法有什么怪癖和/或缺点?

(我在这个问题中寻找纯 JavaScript 的解决方案,所以没有 Caja 和类似的服务器端项目)

【问题讨论】:

    标签: javascript sandbox ecmascript-harmony


    【解决方案1】:

    原则上,这种方法应该可行。但是,有几点需要注意:

    1. 显然,这需要将 all 不受信任的代码放入 with 范围。在实践中,这可能会变得相当笨拙。

    2. 此外,它巧妙地改变了该代码中包含的最外层 var/function 声明的含义,这些声明现在变为本地而不是全局对象上的属性。另一方面,未声明的变量仍然会出现在全局对象上。这可能会破坏某些程序。

    3. 由于 'with' 的疯狂语义,现代 JavaScript VM 放弃了在其范围内优化代码的大多数尝试。对于带有'with'的东西,生成的代码很容易慢两个数量级。

    所以总的来说,我不推荐这种方法。使用 SES 或 Caja 会好得多(不确定在哪种意义上您称它们为服务器端)。

    (同样值得注意的是,ES6 的模块加载器将提供一种更简洁的方式来沙箱化全局对象。但很难说这些何时可用。不会很快。)

    【讨论】:

    • - 我将 Caja 称为“服务器端”,因为它需要一个外部 java 服务器/进程来哄骗代码。另外,你不能用 Caja 做任何你想做的事情(某些库无法工作,某些对象,如 Audio API 不会被驯服等) - 我已经阅读(简要地说,我承认)Harmony module spec。你如何沙箱化全局对象? (我猜是defineBuiltins,但还不清楚)。 - 什么是 SES? :)
    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 2013-03-19
    • 1970-01-01
    • 2014-04-23
    • 1970-01-01
    • 2012-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多