Lupa能否用于在Python中运行不受信任的Lua代码?

假设我使用 register_eval=False 和一个 attribute_filter 来创建 LuaRuntime,以防止访问除了一些 Python 函数以外的任何东西。可以安全地假设 Lua 代码不能执行 os.system("rm -rf *") 或类似的操作吗?

点赞
用户234175
用户234175

从查看Lupa文档

限制Lua访问Python对象

Lupa提供了一个简单的机制来控制访问Python对象。 每个属性访问可以通过过滤函数进行传递,如下所示...

它没有说明任何关于如何防止或限制使用Lua自身提供的功能的访问。 如果对“LuaRuntime”环境不做任何其他修改,则Lua脚本确实可以执行像“os.execute('rm-rf *')”之类的操作。

为了控制lua脚本运行的环境类型,可以使用setfenvgetfenv在运行脚本之前对其进行沙盒处理。 例如:

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-03 18:22:10