Lua的能力:有哪些经验?

曾经在 cap-talk 邮件列表上讨论过 Lua 和 Javascript 是否支持对象能力模型(OCM),其中的结论是由于通过 setfenv 来限制环境的支持以及对不可变对象的无法伪造的引用的可能性,因此可以实现 OCM。

我们看到过这个方法的效果吗?我有兴趣从一个现有的在 Lua 中提供非常有用、慷慨的脚本支持的应用程序中删除漏洞,但不幸的是在所有情况下都允许完全的 shell 访问。需要一些 shell 访问:对象能力模型似乎是管理事物的好办法。但我担心我能否说服人们,这种方法实际上在杂乱无序的实践中确实是经过验证的安全方法。

一些链接:

  1. 较旧的 SO 问题:如何创建一个安全的 Lua 沙箱?
  2. erights.org 的背景:从对象到能力
  3. Lua wiki:沙盒只读表 —— 展示 setfenv 的作用;展示了表的基本思想,这些表在合适的情况下可以被设置为只读

原文链接 https://stackoverflow.com/questions/4134114

点赞
stackoverflow用户605232
stackoverflow用户605232

对于 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 应用程序。Cajoler 尝试通过静态分析验证安全属性,对于不能验证的部分,会对输入进行重写以添加运行时检查。

由于 Web 应用程序常常使用浏览器 API,例如 DOM API,这些 API 给予了对 Web 页面的大量控制权力,Caja 提供了被驯服的 API 来虚拟 DOM 的不同部分。一个包含页面可以设置嵌入式应用程序的环境,使嵌入式应用程序认为它正在与完整页面的 DOM 交互,但实际上只是通过一种称为虚拟 iframe 的机制来操纵包含页面的受限部分。

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

2011-02-07 11:45:15