5

假设我创建LuaRuntimeregister_eval=False一个 和 ,attribute_filter它可以防止访问除了一些 python 函数之外的任何东西。假设 lua 代码不能做os.system("rm -rf *")类似的事情是否安全?

4

1 回答 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 回答