lua - 如何创建安全的 Lua 沙箱?

标签 lua sandbox

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

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

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

如何删除/阻止任何此类不安全函数,而不会最终得到一个甚至没有“ipairs”函数等基本内容的解释器?

最佳答案

您可以通过setfenv设置运行不受信任代码的函数环境。 ()。概要如下:

local env = {ipairs}
setfenv(user_script, env)
pcall(user_script)

user_script 函数只能访问其环境中的内容。因此,您可以显式添加您希望不受信任的代码有权访问的函数(白名单)。在这种情况下,用户脚本只能访问ipairs,而不能访问其他内容(dofileloadfile等)。

参见Lua Sandboxes有关 lua 沙箱的示例和更多信息。

关于lua - 如何创建安全的 Lua 沙箱?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1224708/

相关文章:

objective-c - 使用 ScriptingBridge 从另一个沙盒应用程序中编写 AppleScripting 沙盒应用程序

c - 如何在 Lua 中访问 C 指针

将lua共享对象编译为嵌入式c

objective-c - 将多个文件拖到沙盒应用程序

python - Apple Mac 应用商店的应用沙箱问题

objective-c - SKPaymentTransaction expires_date,似乎 "auto renew"机制在沙箱中不起作用

string - 如何在Lua中隔离由空格分隔的非英语单词?

redis - 在redis集群模式下,我们加载脚本时返回的SHA值是否相同?

lua - 根据表达式文本返回函数的函数

Paypal - 返回 url 页面和变量