目前,我正在用 Lua 编写一个沙箱。到目前为止它正在工作,但我可以使用getfenv
该功能来获取沙箱之外的范围。对于我的沙盒,我用可信函数和库填充了一个空表。但是,使用诸如 之类的函数print
,您可以使用它getfenv
来获取该范围内的全局变量。例如:
asd = "asd"
assert(pcall(assert(load([[
print(getfenv(print).asd) -- "asd"
]], nil, "t", {print = print, getfenv = getfenv}))))
这显然可以让“对手”绕过沙箱。