2

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

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

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

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

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

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

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

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

JSandbox https://github.com/eligrey/jsandbox

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

4

1 回答 1

2

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 工作,但这篇文章完全是我自己的观点和意见。

于 2013-10-31T17:34:51.333 回答