假设我使用LuaRuntimeregister_eval=False创建了attribute_filter,该os.system("rm -rf *")禁止访问除少数python函数以外的任何内容。是否可以安全地假设lua代码将无法执行ojit_code或类似功能?

最佳答案

通过查看Lupa doc:

它并没有说明如何阻止或限制对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 *')")的操作将导致脚本错误。

关于python - Lupa可以用于在python中运行不受信任的lua代码吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17454263/

10-12 23:58