我正在使用modding api进行游戏,对于那些好奇的因素,但它并不是真正相关的,而且Lua环境是非常有限的,阻塞了{{1它是一个5.1环境,我可以访问loadstring,pcall等。我的问题是你如何推荐运行' unsafe'用户提供的代码,并限制他们可以访问哪些功能而无需访问环境修改功能? (最好是白名单功能/值而不是黑名单,但我会尽我所能)
答案 0 :(得分:3)
在Lua 5.1中,您需要setfenv来创建一个安全的沙箱(有关典型过程,请参阅this answer)。因此,如果您无法访问setfenv,那么我认为不能这样做。
然后,再次,如果您正在使用的环境已禁用setfenv并已在loadstring周围放置一个包装器以避免恶意字节码加载(再次,请参阅我链接的答案),那么您可以在不设置的情况下运行脚本一个特殊的环境。这实际上取决于您当前环境的细节是否安全。
答案 1 :(得分:0)
很抱歉我想晚回答(您现在可能已经继续了),但是可以使用内置的load函数来做到这一点。您可以向函数提供第四个参数,这是一个自定义环境,它返回一个函数。您可以传递函数,字符串甚至线程(我认为)以加载并获取所需的结果。我也遇到了这个问题,我想为将来的用户回答。
以下是lua网站上用于加载的文档的链接:https://www.lua.org/manual/5.2/manual.html#pdf-load 我已经对此进行了测试,以确保它可以在Factorio中正常运行,并且可以按预期运行。