因此,Lua 似乎是在我的应用程序中实现安全“用户脚本”的理想选择。
但是,大多数嵌入lua的示例似乎都包含加载所有标准库,包括“io”和“package”。
所以我可以从解释器中排除这些库,但即使是基础库也包含访问文件系统的函数“dofile”和“loadfile”。
如何删除/阻止任何此类不安全函数,而不会最终得到一个甚至没有“ipairs”函数等基本内容的解释器?
最佳答案
您可以通过setfenv设置运行不受信任代码的函数环境。 ()。概要如下:
local env = {ipairs}
setfenv(user_script, env)
pcall(user_script)
user_script
函数只能访问其环境中的内容。因此,您可以显式添加您希望不受信任的代码有权访问的函数(白名单)。在这种情况下,用户脚本只能访问ipairs
,而不能访问其他内容(dofile
、loadfile
等)。
参见Lua Sandboxes有关 lua 沙箱的示例和更多信息。
关于lua - 如何创建安全的 Lua 沙箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1224708/