【发布时间】:2019-09-27 11:13:37
【问题描述】:
我想阻止 io 库,以便社区创建的脚本无法访问它。
没有它我可以简单地创建一个 Lua 状态,但问题是:社区脚本应该仍然能够通过调用 loadfile() 对开发团队创建的包含 io 函数的库调用 loadfile() 来使用 io 库。
我发现没有办法从社区脚本中实现阻止函数/库的双重性,同时仍然允许所述脚本运行有问题的函数/库,如果它们被包装在另一个开发维护的库中(出于清理目的)社区脚本可以使用 loadfile() 加载。我正在采用将某些字符串列入黑名单的丑陋方法,因此如果脚本有它们,它就不会运行。顺便说一句,黑名单是从 C++ 端检查的,其中要运行的脚本是一个字符串变量,如果它是干净的,它将被馈送到 VM。
如果我加入黑名单...
"_G", "io.", "io .", "io}", "io }", "io ", "=io", "= io", "{io", "{ io", ",io", ", io", " io"
...是否仍然可以调用 io 库函数,或者我已经涵盖了所有内容?必须阻止_G的原因是:
a = "i"
b = "o"
boom = _G[a..b]
我想知道是否有可能进行另一种“破解”。此外,我欢迎关于如何在不将字符串列入黑名单的情况下实现上述二元性的替代方案。
【问题讨论】:
-
你错过了
io,,但我认为做这种事情不是一个好主意。也许你宁愿做这样的事情:stackoverflow.com/questions/1224708/…;因此,您可以在普通沙箱中运行 提升 Lua 脚本,在受限沙箱中运行社区脚本。注意不要泄漏高架环境。