Lua Sandboxing - 消除功能创建

ktr*_*ktr 1 lua sandbox

我已经阅读了Lua wiki/here /等关于如何沙箱lua代码的一般信息.但我无法找到不允许创建函数的东西.例如,此处的示例提供了一个示例代码:

assert(run [[function f(x) return x^2 end; t={2}; t[1]=f(t[1])]])
Run Code Online (Sandbox Code Playgroud)

这是一个空洞的环境.但是我想要消除创建函数的能力(代码的第一部分) - 例如,只允许表达式.有关如何做到这一点的任何想法?是否必须以某种方式在C?提前致谢!

lhf*_*lhf 6

如果您只想评估表达式,可以试试这个:

function run(s) return loadstring("return "..s)() end
Run Code Online (Sandbox Code Playgroud)

(错误处理省略)

这个简单的解决方案可以防止大多数"攻击",但不能消除它们,因为人们可以说

(function () f=function(x) print"hello" end end)()
Run Code Online (Sandbox Code Playgroud)

它定义了一个名为的新函数f.

您最好的选择是使用沙箱而不用担心用户对环境的影响,因为它不是您的环境.