Skip to main content
QUICK REVIEW

[论文解读] SafeJS: Hermetic Sandboxing for JavaScript

Damien Cassou, Sté́phane Ducasse|arXiv (Cornell University)|Sep 16, 2013
Security and Verification in Computing参考文献 5被引用 3
一句话总结

SafeJS 通过在 Web Workers 中使用虚拟 DOM(VDOM)将不受信任的脚本隔离,为 JavaScript 提供了完全封闭的沙箱解决方案,确保无法直接访问真实 DOM。它通过基于字符串的消息传递和可配置的策略强制执行安全机制,成功实现在工业环境中安全执行外部脚本。

ABSTRACT

Isolating programs is an important mechanism to support more secure applications. Isolating program in dynamic languages such as JavaScript is even more challenging since reflective operations can circumvent simple mechanisms that could protect program parts. In this article we present SafeJS, an approach and implementation that offers isolation based on separate sandboxes and control of information exchanged between them. In SafeJS, sandboxes based on web workers do not share any data. Data exchanged between sandboxes is solely based on strings. Using different policies, this infrastructure supports the isolation of the different scripts that usually populate web pages. A foreign component cannot modify the main DOM tree in unexpected manner. Our SafeJS implementation is currently being used in an industrial setting in the context of the Resilience FUI 12 project.

研究动机与目标

  • 解决在 Web 混合应用中执行不受信任 JavaScript 所带来的安全风险,其中外部脚本可能意外访问或修改主 DOM。
  • 克服现有解决方案依赖代码重写或受限 JavaScript 子集的局限性,这些方法会损害兼容性。
  • 提供一种安全、可投入生产的沙箱机制,在保持完整脚本兼容性的同时强制实施强隔离。
  • 在不损害主文档或用户数据完整性的前提下,实现第三方脚本的安全集成。

提出的方法

  • 通过在专用 Web Workers 中执行不受信任的 JavaScript 代码来实现隔离,这些 Workers 与主线程和 DOM 完全隔离。
  • 实现一个 SafeJS 虚拟 DOM(VDOM),其行为与标准 DOM 相似,但仅允许受可配置策略限制的修改操作。
  • 使用基于字符串的消息传递在 Workers 和主线程之间传递 DOM 更新,确保无直接对象引用或共享状态。
  • 在将更新应用到真实 DOM 之前,根据安全策略验证所有提议的 DOM 更新,支持忽略或终止恶意脚本。
  • 扩展 jsdom 以创建一个浏览器兼容的、非阻塞的 VDOM 实现,避免文件系统访问和 C++ 依赖。
  • 利用 RequireJS 实现异步模块加载,以确保与客户端执行环境的兼容性。

实验结果

研究问题

  • RQ1如何在不修改脚本本身的情况下,安全地隔离浏览器中执行的不受信任 JavaScript 脚本?
  • RQ2在 JavaScript 等动态、反射性语言中,哪些架构模式能够实现强隔离,尤其是在反射可能绕过简单访问控制的情况下?
  • RQ3能否在无服务端依赖的客户端环境中,实现一个既符合标准又安全的虚拟 DOM 实现?
  • RQ4如何控制隔离脚本与主页面之间的通信,以防止数据外泄或未经授权的 DOM 操作?
  • RQ5是否可行构建一个生产级的、完全封闭的 JavaScript 沙箱系统,使其在性能和与现有 Web 应用的兼容性方面均表现良好?

主要发现

  • SafeJS 成功通过 Web Workers 和虚拟 DOM 隔离了不受信任的 JavaScript 脚本,防止对真实 DOM 的直接访问,消除了数据泄露风险。
  • SafeJS VDOM 是一个功能完整的、浏览器兼容的 DOM Level 3 实现,基于修改后的、非阻塞版本的 jsdom。
  • 该系统支持可配置策略(例如只读、读写),以控制外部脚本能对目标 DOM 节点执行的操作。
  • 检测到不安全的更新后,系统会根据配置选择阻止操作或终止 Worker,从而确保强安全保证。
  • 该实现已在 Resilience FUI 12 项目中投入工业生产环境,证明了其在实际场景中的可行性与生产就绪性。
  • 该方法保持了与现有 JavaScript 代码的完全兼容性,无需对不受信任的脚本进行任何修改即可实现沙箱化。

更好的研究,从现在开始

从阅读论文到最终审阅,大幅缩短您的研究时间。

无需绑定信用卡

本解读由 AI 生成,并经人工编辑审核。