LUA 5.2: 限制载入指定目录的 Load/Require 等函数

我试图保护我的游戏中的 LUA(玩家可以创建 LUA 脚本)。我已经删除了许多函数以创建一种沙箱环境(例如,删除 os.execute 函数)。然而,我的游戏确实使用从其他位置加载脚本来使编码更少冗余。比如:

在文件顶部使用 require("Scripts/Additional/Crafting")

对于我来说,这样做是可以的,但我不知道将 require/load/file.read() 留在没有限制的情况下会产生什么影响,或者是否可能覆盖它,使它无法从服务器外部加载或读取文件。

现在我正在使用带有 LUA5.2 的 NLUA(C#)。我在创建 LUA 状态时删除函数。

我想做的是保留 LOAD/REQUIRE 等函数,但在这些之前进行一个初始检查,以确保它们位于 SCRIPT 目录中。新函数本身将不可编辑(因为我会在 C# 中使用 NLUA 对其进行硬编码,或者制作一个位于他们无法访问的文件夹之外的单独文件)。

或者,我可以通过 C# 对脚本运行快速检查,验证它们使用的目录是否符合正则表达式。但我想知道 LUA 是否可以自己处理它。

如果我没能解释清楚,很抱歉。

点赞
用户12918181
用户12918181

Lua >=5.2 有函数环境 _ENV,在沙盒环境下非常有用,就像在你的情况下一样。请参阅http://lua-users.org/wiki/EnvironmentsTutorial

2020-02-21 16:42:43