我知道您可以使用Lua函数setfenv
将安全内容列入白名单safely execute arbitrary code from Lua。但是,如果我通过脚本执行此操作,不仅是不整洁,而且(用户可修改的游戏)安装mod的毫无戒心的用户只需单击"替换所有"或者在将mod安装到文件夹中的时候,没有考虑任何问题。我确信还有其他方法可以超级轻松地绕过它。
总的来说,最安全的安全方法应该是使用直接C调用来完成此操作,在设置沙箱时不涉及Lua代码/字符串。我怎么能这样做?
答案 0 :(得分:1)
您在Lua脚本中编写的任何内容也可以通过Lua C API在C中执行。但是在C语言中比在等效的Lua脚本中使用起来更难。当我想为宿主程序安装一些受保护的Lua脚本时,我做了类似的事情:
您肯定希望使用沙箱保护运行游戏的计算机免受恶意脚本的侵害。例如,没有文件系统访问权限。但请注意,为了保护您的主机程序免受各种形式的恶意脚本的攻击(例如,通过while 1循环挂起游戏的Lua实例线程;或者使用大量内存,复杂的string.match调用),您必须做更复杂的工作并为mod脚本添加更多约束。
E.g。即使是而1结束仍然会挂起WOW UI。
希望有所帮助。
答案 1 :(得分:0)
不要使用luaL_openlibs
。另一种选择是在你的c程序中存在一些lua代码作为字符串或字节码,你先执行其他任何操作。