gpt4 book ai didi

Lua 为什么在沙盒环境中使用 'require' 不安全?

转载 作者:行者123 更新时间:2023-12-04 14:01:51 25 4
gpt4 key购买 nike

通过此页面:http://lua-users.org/wiki/SandBoxes require 被标记为不安全,这是因为:

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

  • 几乎所有纯 Lua 库都使用“require”,因此不安全是一个巨大的痛苦,因为您不能使用任何纯 Lua 库。我不明白这些不安全的原因。它在库中加载其他 Lua 文件。为什么不安全?

    最佳答案

    Require 在全局环境中加载和执行代码。

    例如,让我们创建一个简单的沙箱(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

    期望在沙箱内,唯一可用的函数是 require。和 print .沙箱内的代码应该无法访问全局 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 为什么在沙盒环境中使用 'require' 不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38596386/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com