【发布时间】:2011-05-07 06:06:29
【问题描述】:
some discussion on the cap-talk mailing list 围绕 Lua 和 Javascript 是否支持对象能力模型,得出的结论是,由于支持通过setfenv 将环境限制为调用函数,以及对不可变对象的不可伪造引用的可能性,可以实现 OCM。
我们有没有看到它是如何工作的?我有兴趣在 Lua 中通过非常有用、慷慨的脚本支持从现有应用程序中删除漏洞,不幸的是,它允许在各种情况下完全访问 shell。需要一些 shell 访问权限:对象能力模型似乎是管理事物的好方法。但我担心我能有多大的说服力,证明这种方法在肯定是混乱的实践中实际上是可验证的安全。
一些链接:
- 老SO问题:How can I create a secure Lua sandbox?
- erights.org 的背景:From Objects To Capabilities
- Lua wiki:SandBoxes 和 ReadOnlyTables - 显示
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