将lua字符串作为lua代码执行

Posted

技术标签:

【中文标题】将lua字符串作为lua代码执行【英文标题】:execute lua string as lua code 【发布时间】:2017-11-07 05:41:54 【问题描述】:

我想与同事共享 lua 模块。为了获得最新版本的共享模块,我想使用 Web 服务器存储和获取它们。

我的问题是:

是否可以直接从http请求或字符串加载lua代码?

我想实现这样的目标:

module = [[
    local sharedModule = 
    function sharedModule.greet(name) print("hello " .. name) end  
    return sharedModule
]]
greeter = require (module)
greeter.greet("john")

也许这不是正确的做法。还有比这个更好的方法吗?

【问题讨论】:

您正在寻找load。但是,我建议在内部托管该模块,并让用户相应地下载/安装它。 @hjpotter92 感谢您的快速回复。并感谢您的建议。我会在访问 lua 模块之前设置安全检查 【参考方案1】:

Lua 编程 中有 a whole section 专门讨论这个问题。 loadstring 将直接满足您的需求。

不过,我会仔细验证您实际执行的代码。至少,版本它(如果运行的代码取决于处于某种状态的环境,那么运行错误的版本很可能会导致各种问题)。最佳校验和并签署代码,并在做任何事情之前验证签名。如果您的环境没有受到保护,这本质上是一个巨大的后门开口。

您还可以使用rings 库来隔离您正在运行的代码 Lua 环境本身。它在安全方面可能不是无懈可击的,但至少应该防止接收到的代码在出现问题时使您的应用程序崩溃。

【讨论】:

以上是关于将lua字符串作为lua代码执行的主要内容,如果未能解决你的问题,请参考以下文章

深入理解Lua虚拟机

深入理解Lua虚拟机

lua 学习之编译

lua重复执行一段代码

python执行lua代码

编译lua代码,存储字节码然后加载并执行