【问题标题】:Running untrusted code in Lua via loadstring通过 loadstring 在 Lua 中运行不受信任的代码
【发布时间】:2017-11-05 17:11:22
【问题描述】:

我正在为一个游戏开发一个 modding api,对于那些好奇的人来说,它是 factorio,但它并不真正相关,而且 Lua 环境非常有限,阻塞了像 setfenv 这样的功能,这是一个 5.1 环境,我可以访问加载字符串、pcall 等。我的问题是,您如何建议运行用户提供的“不安全”代码并限制他们可以访问哪些功能而无需访问环境修改功能? (最好将函数/值列入白名单而不是黑名单,但我会尽我所能)

【问题讨论】:

标签: lua


【解决方案1】:

在 Lua 5.1 中,您需要 setfenv 来创建安全沙箱(有关典型过程,请参阅 this answer)。因此,如果您无法访问 setfenv,那么我认为它无法完成。

再一次,如果您正在使用的环境禁用了 setfenv 并在 loadstring 周围放置了一个包装器以避免恶意字节码加载(再次,请参阅我链接的答案),那么您可能无需设置即可运行脚本一个特殊的环境。这实际上取决于您当前环境的详细信息是否安全。

【讨论】:

    【解决方案2】:

    对于迟到的答案,我深表歉意(您现在可能已经继续前进了),但可以使用内置的加载功能来做到这一点。您可以为作为自定义环境的函数提供第四个参数,它会返回一个函数。您可以传递一个函数、一个字符串,甚至可能是一个线程(我认为)来加载并获得您想要的结果。我也遇到了这个问题,我想我会为以后的用户回答这个问题。

    这里是 lua 站点上用于加载的文档的链接:https://www.lua.org/manual/5.2/manual.html#pdf-load 我已经对此进行了测试,以确保它在异星工厂中正常工作,并且似乎可以按预期工作。

    【讨论】:

      猜你喜欢
      • 2013-07-01
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多