Lua沙箱环境为何需限制不安全操作?
- 内容介绍
- 文章标签
- 相关推荐
本文共计423个文字,预计阅读时间需要2分钟。
通过此页面:[Lua Users - Sandboxes](http://lua-users.org/wiki/SandBoxes),请标记为不安全。这是因为:
- 修改全局变量(例如:package.loaded)。- 提供对沙箱外部环境的访问。- 访问文件系统。- 几乎使用所有Lua库都通过`require`。
通过此页面: 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.
该模块已脱离沙箱.
本文共计423个文字,预计阅读时间需要2分钟。
通过此页面:[Lua Users - Sandboxes](http://lua-users.org/wiki/SandBoxes),请标记为不安全。这是因为:
- 修改全局变量(例如:package.loaded)。- 提供对沙箱外部环境的访问。- 访问文件系统。- 几乎使用所有Lua库都通过`require`。
通过此页面: 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.
该模块已脱离沙箱.

