假设我创建LuaRuntime
了register_eval=False
一个 和 ,attribute_filter
它可以防止访问除了一些 python 函数之外的任何东西。假设 lua 代码不能做os.system("rm -rf *")
类似的事情是否安全?
问问题
2020 次
1 回答
11
通过查看Lupa 文档:
限制 Lua 对 Python 对象的访问
Lupa 提供了一种简单的机制来控制对 Python 对象的访问。每个属性访问都可以通过过滤器函数传递,如下所示...
它没有说任何关于阻止或限制对 Lua 本身提供的设施的访问。如果没有对LuaRuntime
环境进行其他修改,那么 lua 脚本确实可以执行类似os.execute("rm -rf *")
.
要控制 lua 脚本在哪种环境中工作,您可以在运行脚本之前使用setfenv
和对脚本进行沙箱处理。getfenv
例如:
import lupa
L = lupa.LuaRuntime()
sandbox = L.eval("{}")
setfenv = L.eval("setfenv")
sandbox.print = L.globals().print
sandbox.math = L.globals().math
sandbox.string = L.globals().string
sandbox.foobar = foobar
# etc...
setfenv(0, sandbox)
现在做类似L.execute("os.execute('rm -rf *')")
的事情会导致脚本错误。
于 2013-07-03T18:22:10.750 回答