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

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

概述通过此页面: http://lua-users.org/wiki/SandBoxes要求被标记为不安全,这是因为: >修改全局变量(例如package.loaded) >提供对沙箱外部环境的访问 >并访问文件系统 几乎所有纯Lua库都使用’require’,所以不要安全是一个巨大的痛苦,因为你不能使用任何纯Lua库.我不明白这些不安全的原因.它加载库中的其他Lua文件.为什么这不安全? 需要加载并 通过此页面: http://lua-users.org/wiki/SandBoxes要求被标记为不安全,这是因为:

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

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

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

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

-- example.luamy_global = 42local sandBoxdo  local _ENV = { require = require,print = print }  function sandBox()    print('<sandBox> my_global =',my_global)    require 'example_module'  endendprint('<global> my_global =',my_global)sandBox()print('<global> my_global =',my_global)

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

-- example_module.luaprint('<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.

该模块已脱离沙箱.

总结

以上是内存溢出为你收集整理的Lua为什么在沙箱环境中“要求”不安全?全部内容,希望文章能够帮你解决Lua为什么在沙箱环境中“要求”不安全?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1228220.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存