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

Lio*_*and 6 lua require

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

我的问题是:

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

我想实现这样的目标:

module = [[
    local sharedModule = {}
    function sharedModule.greet(name) print("hello " .. name) end  
    return sharedModule
]]
greeter = require (module)
greeter.greet("john")
Run Code Online (Sandbox Code Playgroud)

也许这不是正确的事情。有没有比这更好的方法了?

Bar*_*icz 5

一整节程序在Lua致力于这一点。您的需求将直接通过满足loadstring

不过,我会仔细验证您实际执行的代码。至少要对其进行版本化(如果运行的代码取决于处于特定状态的环境,运行错误的版本很可能会导致各种各样的问题)。在执行任何操作之前,优化校验和并对代码签名,并验证签名。如果您的环境没有受到保护,那么这实际上是一个巨大的后门漏洞。

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