繁体   English   中英

通过loadstring在Lua中运行不受信任的代码

[英]Running untrusted code in Lua via loadstring

我正在使用modding api进行游戏,对于那些好奇的它是factorio但是它并不真正相关,而且Lua环境非常有限,阻塞了像setfenv这样的函数,它是一个5.1环境,我可以访问loadstring,pcall,我的问题是你如何推荐运行用户提供的“不安全”代码,并限制他们可以访问哪些功能而无需访问环境修改功能? (最好是白名单功能/值而不是黑名单,但我会采取任何我能得到的)

在Lua 5.1中,您需要setfenv来创建一个安全的沙箱(有关典型过程,请参阅此答案 )。 因此,如果您无法访问setfenv,那么我认为不能这样做。

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

我为一个迟到的答案道歉(你现在可能已经开始了)但是可以使用内置的加载功能来做到这一点。 您可以为函数提供第四个参数,该函数是自定义环境并返回一个函数。 您可以传递一个函数,一个字符串,甚至一个线程(我认为)来加载并获得您想要的结果。 我也遇到了这个问题,我想我会为将来的用户回答这个问题。

以下是lua网站上负载文档的链接: https ://www.lua.org/manual/5.2/manual.html#pdf-load我已对此进行了测试,以确保它在Factorio中正常工作,它似乎按预期工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM