在我的应用程序中,Lua语言是执行安全“用户脚本”(user scripts)最理想的选择。但是,lua在实行嵌入功能时会加载全部标准库,包括io和package。所以,我可以从解释器中筛选出这些库,包括对基础库的筛选,例如读取filesystem的dofile和loadfile功能。
如果不关闭解释器,我怎样才能移除或者关闭这些不安全的功能?
在我的应用程序中,Lua语言是执行安全“用户脚本”(user scripts)最理想的选择。但是,lua在实行嵌入功能时会加载全部标准库,包括io和package。所以,我可以从解释器中筛选出这些库,包括对基础库的筛选,例如读取filesystem的dofile和loadfile功能。
如果不关闭解释器,我怎样才能移除或者关闭这些不安全的功能?
1 回答1.4k 阅读✓ 已解决
1k 阅读
答:Karl Voigtland
你可以设定函数的环境,使一些不受信任的代码通过setfenv()顺利运行,下面是一个基本的思路:
user_script功能只能读取环境内部的数据,所以你可以在这项功能中特别添加一些功能,以便识别不受信任的代码可以。这样,user_script只能读取ipairs,不会读取类似于dofile,loadfile的数据了。
答:BMitch
下面是一个针对于Lua 5.2的解决方案,(其中一些简单的函数也适用于5.1):
在使用,可以调用以下代码:
答:lhf
在Lua live demo中就可以免费找到sandbox,不过版本有些特殊。