2017-06-06 269 views
3

我想與同事分享lua模塊。爲了獲得最新版本的共享模塊,我想要使用Web服務器來存儲和獲取它們。執行lua字符串作爲lua代碼

我的問題是:

是否有可能直接從http請求或串加載Lua代碼?

我想達到這樣的事情:

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

也許這是不正確的事情。有沒有比這更好的方法?

+4

您正在尋找['load'](https://devdocs.io/lua~5.3/index#pdf-load)。不過,我建議在內部託管模塊,並讓用戶相應地下載/安裝它。 – hjpotter92

+0

@ hjpotter92感謝您的快速回復。並感謝您的建議。我將在訪問lua模塊之前設置安全檢查 –

回答

2

a whole section編程在Lua致力於此。您的需求將直接通過loadstring完成。

雖然我會仔細驗證你正在執行的代碼。至少,它的版本(運行錯誤的版本最有可能會導致各種問題,如果運行的代碼取決於處於特定狀態的環境)。優化校驗和並對代碼進行簽名,並在做任何事之前驗證簽名。如果你的環境不受保護,這實質上是一個巨大的後門開放。

您也可以使用rings庫來隔離您正在運行的代碼之內的Lua環境本身。它可能不是密閉式的安全方式,但至少應該防止接收到的代碼在應用程序出錯時將應用程序崩潰。