如何在 Lua 中建立沙箱?


為了建立一個沙箱並能夠使用它,我們首先必須瞭解什麼是沙箱以及為什麼需要它。沙箱是一個在計算機科學的不同領域使用的術語,例如,如果我們討論軟體測試領域,那麼沙箱是一個測試環境,它將未經測試的程式碼更改與生產環境隔離,並且如果我們談論網路安全,那麼沙箱是一個環境,它是一個獨立的虛擬機器,在其中可以執行潛在的非安全軟體程式碼。

沙盒機制基本上是隔離一段軟體,而這段軟體在沙盒的幫助下被隔離。應該注意的是,沙盒機制有些棘手且通常難以理順。

Lua 提供了不同的方法來建立沙箱,並且還提供了不同的關鍵字和函式,以便我們在沙箱內使用。

示例

現在,讓我們建立一個簡單的沙箱,其中我們將儲存不受信任的程式碼。

請考慮以下所示示例 −

 即時演示

function print_env()
   print(_ENV)
end
function sandbox()
   print(_ENV)
   -- need to keep access to a few globals:
   _ENV = { print = print, print_env = print_env, debug = debug, load = load }
   print(_ENV)
   print_env()
   local code1 = load('print(_ENV)')
   code1()
   debug.setupvalue(code1, 1, _ENV) -- set our modified env code1()
   local code2 = load('print(_ENV)', nil, nil, _ENV) -- pass 'env' arg code2()
end
sandbox()

輸出

table: 0x1a409c0
table: 0x1a47790
table: 0x1a47790
table: 0x1a409c0
table: 0x1a47790
table: 0x1a47790


更新於: 2021-07-20

639 次瀏覽

開啟你的職業生涯

完成課程獲得認證

立即開始
廣告
© . All rights reserved.