如何创建安全的Lua沙箱?

如何创建安全的Lua沙箱?

所以Lua似乎是在我的应用程序中实现安全“用户脚本”的理想选择。

但是,嵌入lua的大多数示例似乎都包括加载所有标准库,包括“io”和“package”。

所以我可以从我的解释器中排除这些库,但即使是基本库也包含访问文件系统的函数“dofile”和“loadfile”。

如何删除/阻止这些不安全的函数,而不仅仅是一个甚至没有像“ipairs”函数这样的基本内容的解释器?


MMMHUHU
浏览 853回答 3
3回答

汪汪一只猫

您可以通过setfenv()设置运行不受信任代码的功能环境。这是一个大纲:local env = {ipairs}setfenv(user_script, env)pcall(user_script)该user_script功能只能访问其环境中的内容。因此,您可以显式添加您希望不受信任的代码可以访问的功能(白名单)。在这种情况下,用户脚本只能访问ipairs,但没有别的(dofile,loadfile,等)。有关lua沙盒的详细信息,请参阅Lua Sandboxes。
打开App,查看更多内容
随时随地看视频慕课网APP