加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Lua为什么在沙箱环境中“要求”不安全?

发布时间:2020-12-14 21:48:37 所属栏目:大数据 来源:网络整理
导读:通过此页面: http://lua-users.org/wiki/SandBoxes要求被标记为不安全,这是因为: 修改全局变量(例如package.loaded) 提供对沙箱外部环境的访问 并访问文件系统 几乎所有纯Lua库都使用’require’,所以不要安全是一个巨大的痛苦,因为你不能使用任何纯Lua库.
通过此页面: http://lua-users.org/wiki/SandBoxes要求被标记为不安全,这是因为:

>修改全局变量(例如package.loaded)
>提供对沙箱外部环境的访问
>并访问文件系统

几乎所有纯Lua库都使用’require’,所以不要安全是一个巨大的痛苦,因为你不能使用任何纯Lua库.我不明白这些不安全的原因.它加载库中的其他Lua文件.为什么这不安全?

解决方法

需要加载并在全局环境中执行代码.

例如,让我们创建一个简单的沙箱(Lua> = 5.2):

-- example.lua
my_global = 42

local sandbox
do
  local _ENV = { require = require,print = print }

  function sandbox()
    print('<sandbox> my_global =',my_global)
    require 'example_module'
  end
end

print('<global> my_global =',my_global)
sandbox()
print('<global> my_global =',my_global)

现在,让我们创建一个更改my_global的模块:

-- example_module.lua
print('<module> my_global =',my_global)
my_global = nil

期望沙盒内部唯一可用的功能是需要和打印.沙箱中的代码不应该能够访问全局my_global.

运行示例,您将看到:

$lua example.lua
<global> my_global =    42      -- The global environment,Ok.
<sandbox> my_global =   nil     -- Inside the sandbox,Ok.
<module> my_global =    42      -- Inside the sandbox,but loaded with require. Whoops,we have access to the global environment.
<global> my_global =    nil     -- The module changed the value and it is reflected in the global environment.

该模块已脱离沙箱.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读