簡體   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