2017-06-05 58 views
1

我正在爲遊戲設計一個modding api,對於那些好奇它是factorio,但它並不真正相關,並且Lua環境是HEAVILY有限的,阻止像setfenv這樣的函數,它是一個5.1環境並且我可以訪問loadstring,pcall等。我的問題是,如何建議運行由用戶提供的「不安全」代碼,並限制他們可以訪問哪些功能而無需訪問環境修改功能? (最好是白名單功能/值而不是黑名單,但我會盡我所能)通過loadtring在Lua中運行不受信任的代碼

+0

如果您願意嚴重犧牲性能,可以使用幾個Lua-in-Lua仿真器。 (http://lua-users.org/wiki/LuaInterpreterInLua) – Stormswept

回答

3

在Lua 5.1中,您需要setfenv來創建一個安全沙箱(有關典型過程,請參閱this answer)。所以,如果你無法使用setfenv,那麼我認爲它不能完成。

然後,如果您正在使用的環境已禁用setfenv並且已經在loadstring周圍放置了一個包裝以避免惡意字節碼加載(再次請參閱我鏈接的答案),那麼您可能無需設置即可運行腳本爲它提供一個特殊的環境。它確實取決於當前環境的細節,以確定它是否安全。

相關問題