2017-06-05 46 views
1

我正在为游戏设计一个modding api,对于那些好奇它是factorio,但它并不真正相关,并且Lua环境是HEAVILY有限的,阻止像setfenv这样的函数,它是一个5.1环境并且我可以访问loadstring,pcall等。我的问题是,如何建议运行由用户提供的“不安全”代码,并限制他们可以访问哪些功能而无需访问环境修改功能? (最好是白名单功能/值而不是黑名单,但我会尽我所能)通过loadtring在Lua中运行不受信任的代码

+0

如果您愿意严重牺牲性能,可以使用几个Lua-in-Lua仿真器。 (http://lua-users.org/wiki/LuaInterpreterInLua) – Stormswept

回答

3

在Lua 5.1中,您需要setfenv来创建一个安全沙箱(有关典型过程,请参阅this answer)。所以,如果你无法使用setfenv,那么我认为它不能完成。

然后,如果您正在使用的环境已禁用setfenv并且已经在loadstring周围放置了一个包装以避免恶意字节码加载(再次请参阅我链接的答案),那么您可能无需设置即可运行脚本为它提供一个特殊的环境。它确实取决于当前环境的细节,以确定它是否安全。

相关问题