假设我LuaRuntime使用register_eval=False和创建一个attribute_filter阻止访问除了一些python函数之外的任何东西.假设lua代码无法做到os.system("rm -rf *")或类似的事情是否安全?
gre*_*olf 10
从查看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)
Run Code Online (Sandbox Code Playgroud)
现在做类似的事L.execute("os.execute('rm -rf *')")会导致脚本错误.