如何在 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 次浏览

开启你的职业生涯

完成课程获得认证

立即开始
广告