Lua 沙箱的主要作用是屏蔽一些危险的函数。例如:
os.execute "del mushclient.exe"
MUSHclient 在全局属性对话框中有一个专门设置 Lua 初始化环境的地方。在这里面,你可以通过把一些危险的函数(例如“os”)赋值为 nil 来屏蔽它们。
如果你不打算执行一些未确认绝对安全的脚本(例如网上下载的插件),并且想在自己的脚本中使用一些危险的函数,你可以编辑沙箱中的初始化代码,把你需要用到的函数注释掉。
沙箱中的代码会在每次实例化 Lua 脚本引擎时被执行,换句话说,每个游戏和插件都会最先执行这里的代码。
沙箱默认的代码中有一些怎样只允许某些特定插件执行危险函数的例子,修改这个例子,你可以只让你编写的插件执行危险函数,同时还可以放心的安装网上下载的插件。
沙箱默认禁用下面的函数库:
- loadlib(不允许加载动态连接库,这些库里可能包含恶意代码)
- io(不允许创建和打开文件)
- os(不允许执行系统函数,例如“execute”)
你可以修改沙箱的代码来去除所有的限制,或者根据需要启用某些函数。例如,如果你想使用 os.date 和 os.time(或者其它安全的函数),但是不想开放 os.execute,os.remove 和 os.rename 函数,你可以这样做:
把 os = nil 这行注释掉,然后添加下面三行脚本:
os.execute = nil
os.remove = nil
os.rename = nil