Lua的能力:有什么经验?

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

我们有没有看到这是如何工作的? 我很感兴趣的是从现有的应用程序中删除漏洞利用非常有用,慷慨的脚本支持在Lua,不幸的是允许在各种情况下完全shell访问。 需要一些shell访问权限:对象能力模型似乎是一种pipe理事物的好方法。 但是我担心我可以做出多less有说服力的事实,这种方法实际上在可靠的混乱实践中是可validation的。

一些链接:

  1. 较老的问题: 我如何创build一个安全的Lua沙箱?
  2. erights.org的背景: 从对象到function
  3. Lua wiki: SandBoxes和ReadOnlyTables – 显示setfenv的行动; 显示了在正确的情况下可以只读的表格的基本思想

我不能说Lua,但为了Javascript,Caja有工具来创build一个合适的沙箱,限制只有某些function的访问。 它最初是为构buildHTML / JS小部件(如iGoogle上使用的小部件)创build沙箱而创build的。

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

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

Caja(发音为“KA-ha”)是一个西class牙词,意思是盒子,银行,收银机,金库; 贵重物品的容器。 Web开发人员使用HTML,JavaScript和CSS等传统工具; Caja提供了一个编译器(一个“cajoler”),它接受Web应用程序并生成一个“cajoled”的HTML Web应用程序。 cajoler试图通过静态分析来validation安全属性,并且它不能重写input来添加运行时检查。

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

Caja应用程序使用的JavaScript写入JavaScript的失败停止子集(实际上是EcmaScript5)。 这个名为“Valija”的子集包含了几乎全部的JavaScript语言,但删除了一些容易出错的结构,比如使用和限制如何使用eval。