35

关于 Lua 和 Javascript 是否支持对象能力模型的邮件列表上有一些讨论,cap-talk结论是由于支持将环境限制为通过 调用的函数setfenv,以及对不可变对象的不可伪造引用的可能性,OCM 可能是实施的。

我们看到这是怎么回事了吗?我有兴趣在 Lua 中通过非常有用、慷慨的脚本支持从现有应用程序中删除漏洞利用,不幸的是,它允许在各种情况下完全访问 shell。需要一些 shell 访问权限:对象能力模型似乎是管理事物的好方法。但我担心我能做出多么令人信服的案例,即这种方法在肯定会变得混乱的实践中实际上是可验证的安全的。

一些链接:

  1. 较早的 SO 问题:如何创建安全的 Lua 沙箱?
  2. erights.org 的背景:从对象到能力
  3. Lua wiki:SandBoxesReadOnlyTables -setfenv实际展示;显示表格背后的基本思想,在适当的情况下,可以将其设为只读
4

1 回答 1

3

我无法与 Lua 交谈,但对于 Javascript,Caja 具有创建适当沙箱的工具,限制对某些功能的访问。它最初是为了为 HTML/JS 小部件(如 iGoogle 上使用的小部件)构建沙箱而创建的。

http://code.google.com/p/google-caja/

以下是他们主页上对该项目的描述:

Caja(发音为“KA-ha”)是一个西班牙语单词,意思是盒子、银行、收银机、保险库;盛放贵重物品的容器。Web 开发人员使用 HTML、JavaScript 和 CSS 等传统工具;Caja 提供了一个编译器(一个“cajoler”),它接受 Web 应用程序并生成一个“cajoled”HTML Web 应用程序。哄骗者尝试通过进行静态分析来验证安全属性,并且在它不能重写输入以添加运行时检查的情况下。

由于 Web 应用程序普遍使用浏览器 API,例如 DOM API,它们可以对网页进行大量控制,因此 Caja 提供了可虚拟化部分 DOM 的驯服 API。包含页面可以设置嵌入应用程序的环境,以便嵌入式应用程序认为它正在与整个页面的 DOM 交互,但实际上只是通过称为虚拟 iframe 的机制来操作包含页面的有界部分。

Caja 应用程序使用的 JavaScript 是用 JavaScript 的故障停止子集编写的(实际上是 EcmaScript5)。该子集称为“Valija”,几乎包括整个 JavaScript 语言,但删除了一些容易出错的结构,例如 with 并限制了 eval 的使用方式。

于 2011-02-07T11:45:15.133 回答