![](/img/trans.png)
[英]how do you set up Lupa to restrict access to any Python objects/function from within Lua code?
[英]Can Lupa be used to run untrusted lua code in python?
假設我使用register_eval=False
創建LuaRuntime
,並使用attribute_filter
來阻止訪問除少數python函數之外的任何內容。 假設lua代碼無法執行os.system("rm -rf *")
或類似的東西是否安全?
從查看Lupa文檔 :
限制Lua訪問Python對象
Lupa提供了一種控制Python對象訪問的簡單機制。 每個屬性訪問都可以通過過濾函數傳遞,如下所示......
它沒有說任何關於防止或限制Lua本身提供的設施的訪問。 如果沒有對LuaRuntime
環境進行其他修改,那么lua腳本確實可以執行類似os.execute("rm -rf *")
。
要控制lua腳本在哪種環境中工作,可以使用setfenv
和getfenv
在運行腳本之前對腳本進行沙箱處理。 例如:
import lupa
L = lupa.LuaRuntime()
sandbox = L.eval("{}")
setfenv = L.eval("setfenv")
sandbox.print = L.globals().print
sandbox.math = L.globals().math
sandbox.string = L.globals().string
sandbox.foobar = foobar
# etc...
setfenv(0, sandbox)
現在執行類似L.execute("os.execute('rm -rf *')")
將導致腳本錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.