【问题标题】:Capabilities for Lua: what experience is there?Lua 的能力:有什么经验?
【发布时间】:2011-05-07 06:06:29
【问题描述】:

some discussion on the cap-talk mailing list 围绕 Lua 和 Javascript 是否支持对象能力模型,得出的结论是,由于支持通过setfenv 将环境限制为调用函数,以及对不可变对象的不可伪造引用的可能性,可以实现 OCM。

我们有没有看到它是如何工作的?我有兴趣在 Lua 中通过非常有用、慷慨的脚本支持从现有应用程序中删除漏洞,不幸的是,它允许在各种情况下完全访问 shell。需要一些 shell 访问权限:对象能力模型似乎是管理事物的好方法。但我担心我能有多大的说服力,证明这种方法在肯定是混乱的实践中实际上是可验证的安全。

一些链接:

  1. 老SO问题:How can I create a secure Lua sandbox?
  2. erights.org 的背景:From Objects To Capabilities
  3. Lua wiki:SandBoxesReadOnlyTables - 显示 setfenv 正在运行;显示表格背后的基本思想,在适当的情况下,表格可以设为只读

【问题讨论】:

  • 听起来你已经完成了你的功课。你到底错过了什么?
  • 郑重声明,我认为 Lua 绝对能够支持 OCM。至少,您可以自己编辑 liolib.c 和 loslib.c 的源代码。应该比较简单,因为那里的代码没有那么复杂。
  • +1 提醒我 cap-talk 邮件列表 :)
  • 我想指出,setfenv 将被弃用,取而代之的是 _ENV 变量和 loadin 从 Lua 5.2 版开始的函数:lua.org/work/doc/manual.html#2.2
  • @Zecc:这是一个重要的变化,“C 函数不再有环境。如果您需要在多个 C 函数之间保持共享状态,请在共享表中使用上值。(您可以使用 luaL_setfuncs打开一个所有函数共享一个共同上值的 C 库。)"

标签: security lua environment-variables sandbox capability


【解决方案1】:

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

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

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

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

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

Caja 应用程序的 JavaScript uses 写在故障停止子集中 JavaScript(实际上是 EcmaScript5)。 这个子集称为“Valija”,包括 几乎整个 JavaScript 语言, 但是去掉了一些容易出错的 with 和 restricts 等结构 如何使用 eval。

【讨论】:

  • 如果我正确理解了这个项目,我们的想法是我们有一个 Javascript 的子集 Cajita,它是用一种方言编写的,它以能力传递风格限制对数据的访问。我的第一印象是,对于我心目中的重构任务,这将是一个非常繁重的功能应用程序,它并没有真正回答基于功能的安全模型在玩具示例之外是什么样子的问题。但是看看如何将典型的 Javascript 重构为 Cajita 可能是有益的。
猜你喜欢
  • 2012-04-15
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 2014-09-19
  • 1970-01-01
  • 2012-06-13
  • 1970-01-01
  • 2020-01-10
相关资源
最近更新 更多