【问题标题】:Restrict third party scripts - Google Caja?限制第三方脚本 - Google Caja?
【发布时间】:2013-10-15 10:19:15
【问题描述】:

我正在构建一个 CMS 系统,我想限制第三方 javascript 包括用户可以嵌入到他们的网站中。

我将使用跟踪作为示例场景,因为它最能描述我想要实现的目标。

  1. 我创建了一个授权脚本白名单(即 Google Analytics、Optimizely)
  2. 用户输入新脚本,但它不在白名单(即 Tableau)中,核心功能将被阻止/限制/减少。

定义“阻塞”:脚本无法与页面上的任何元素交互(即观察表单元素并从提交的表单中捕获数据)或数据被混淆且根本无用的用户访问。

因此,考虑到上述示例,我希望 Tableau 的功能会有所减少。热图报告之类的东西将不再起作用(因为我们阻止了与 DOM 的交互,所以客户端事件不应该起作用)。我还假设查看 Caja 的架构,访问似乎来自 Cajoled 服务,而不是来自用户浏览器?

看看 Google Caja 似乎它可能是一个选择,但重点始终围绕整个 HTML/CSS/JS(一个小工具/应用程序),从这个意义上说,我正在寻找的东西稍微减少了一些。也许有其他解决方案

它是可以设置为通用的,还是需要针对每个白名单/黑名单项目进行特定的工作?

编辑 - 查看它,有各种类型的沙盒脚本可用,但它们看起来都相对不受支持或处于开发的每个生产阶段。

JS沙盒 https://github.com/eligrey/jsandbox

JS.js https://github.com/jterrace/js.js

【问题讨论】:

    标签: javascript sandbox google-caja


    【解决方案1】:

    Caja 不会“开箱即用”地完成您想要的所有事情,但它很有可能为您的沙盒提供有用的组件。

    Caja 本身根本不支持您提出的“列入白名单的脚本”模型;指导原则是,任何代码都不应该被“信任”超过完成其工作所需的程度,因此我们专注于基于程序预期用途的授权,而不是它的作者。如果您想要一个完整页面访问脚本的白名单,那么您需要自己构建它,但这不会是一个复杂的问题,并且可能需要与您的 CMS 紧密集成。

    现在,支持运行具有“简化”功能的脚本是 Caja 可以 提供帮助的。然而,目前还不清楚你想要什么样的减少。

    • 如果您只想运行代码并获取数据输入/输出,那么只需SES 即可轻松处理; Caja 中的所有沙盒代码都会在 SES 下自动运行,或者如果它适合您的应用程序,您可以在不使用 Caja 的情况下加载 SES,这会稍微轻一些,但需要更多地了解如何编写功能安全的 JavaScript。

      (这也是你提到的其他 JS 沙箱所扮演的相同角色。与你提到的其他选项相比,SES 可能(我没有详细查看它们)更容易支持与沙箱的密切交互代码,例如不涉及异步回调的双向函数调用。)

    • 如果您想提供对简单 API 的过滤访问,那么 Caja 可以使用“驯服”工具轻松做到这一点。

    • 另一方面,如果您想提供对现有页面的 DOM 的有限访问,那么 Caja 没有为您准备好的东西,但可能会为此目的进行修改.您显然已经注意到,Caja 的 DOM 驯服层专注于让沙盒代码完全控制页面的片段,而不是访问整个页面的选定方面。这样做需要一些修改。 (如果感兴趣,一个特别容易支持的情况是提供对整个页面的只读访问权限;Caja 出于自己的需要支持这一点,但只是没有碰巧是一种公开的方式来要求它。)

    如果您仍然对使用 Caja 感兴趣,我建议您在 google-caja-discuss 上展开讨论,并准确描述您希望支持哪种缩减功能。

    免责声明:我在 Caja 项目上为 Google 工作,但这篇文章完全是我自己的观点和意见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-15
      • 1970-01-01
      • 2017-08-08
      • 1970-01-01
      • 2013-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多