我正在构建一个CMS系统,我想限制用户可以嵌入其网站的第三方JavaScript包含。
我将使用跟踪作为示例场景,因为它最好地描述了我想要实现的目标。
定义“已阻止”:脚本无法与页面上的任何元素交互(即监视表单元素并从提交的表单中捕获数据)或用户访问数据被混淆且根本无用的。
因此,考虑到上面的示例,我希望可以减少Tableau的功能。 Heatmap报告之类的东西将不再起作用(因为我们阻止与DOM的交互,客户端事件不应该起作用)。另外我假设看看Caja的架构,访问似乎来自Cajoled服务,而不是来自用户浏览器?
看看谷歌Caja似乎可能是它的选择,但重点始终是整个HTML / CSS / JS(一个小工具/应用程序),我在寻找的东西在这个意义上略有减少。也许有另一种解决方案
是否可以将其设置为通用,或者是否需要针对每个白名单/黑名单项目进行特定工作?
编辑 - 看一下,有各种类型的沙盒脚本可用,但它们看起来都相对不受支持或处于开发的每个生产阶段。
JSandbox https://github.com/eligrey/jsandbox
答案 0 :(得分:2)
Caja不会“开箱即用”地完成你想要的所有内容,但它很有可能为你的沙盒提供有用的组件。
Caja本身并不支持你提出的“白名单脚本”模型;指导原则是任何代码都不应该比它需要的“信任”更多,因此我们专注于基于程序的预期用途而不是作者的授权。如果你想要一个全页面访问脚本的白名单,那么你需要自己构建,但这不是一个复杂的问题,并且可能需要与你的CMS紧密集成。
现在,支持运行具有“减少”功能的脚本是Caja 可以帮助的。但是,目前还不清楚你想要什么样的减少。
如果您只想运行代码并获取数据输入/输出,那么只需SES即可轻松处理; Caja中的所有沙盒代码都是在SES下自动运行的,或者如果它适合您的应用程序,您可以加载没有Caja的SES,重量稍轻但需要更多地了解如何编写功能安全的JavaScript。
(这也是你提到的其他JS沙箱所填写的角色。与你提到的其他选项相比,SES可能(我没有详细查看过)可以更容易地支持与沙盒的密切交互。代码,例如函数调用两种方式,不涉及异步回调。)
如果您想提供对简单API的过滤访问,那么Caja可以使用“驯服”工具轻松完成。
另一方面,如果您想向现有网页的DOM 提供有限的访问权限,那么Caja没有为您准备任何内容,但可能会针对此目的进行修改。正如您已经注意到的那样,Caja的DOM驯服层专注于为沙盒代码提供对页面片段的完全控制,而不是访问整个页面的选定方面。这样做需要一些修改。 (如果感兴趣的话,一个特别容易支持的案例是提供对整个页面的只读访问; Caja支持这个以满足自己的需求,但是没有碰巧是一种公开的方式来询问它。)
如果您仍然对使用Caja感兴趣,我建议您开始讨论google-caja-discuss,并准确描述您希望支持哪种缩减功能。
免责声明:我在Google上为Caja项目工作,但这篇文章完全是我自己的观点和意见。