gpt4 book ai didi

Lua Sandbox 具有特殊功能的泄漏

转载 作者:行者123 更新时间:2023-12-05 00:36:45 27 4
gpt4 key购买 nike

我正在尝试使用 How can I create a secure Lua sandbox?构建我自己的泄漏沙箱。

我正在尝试创建一个 Lua 沙箱,其中一些 Lua 函数可以访问沙箱外的其他一些 Lua 函数。例如,我希望我的沙箱有一个特殊的“显示”功能,它可以调用“打印”但沙箱中也没有“打印”。

主要问题是我试图在一个已经很大的代码库中构建一个沙箱,所以我不能将函数置零。

这怎么可能?

由于没有我的错,解决方案必须是纯 Lua 函数。

最佳答案

创建沙箱时,您可以通过从更大的环境中挑选函数和值来创建新的沙箱环境来实现。您不需要破坏或“清除”原始环境中的任何内容。

  • 通过挑选功能和值创建您的沙箱环境
  • 加载一个脚本(这将编译它并将其作为要调用的函数返回)
  • 将脚本环境设置为沙箱环境
  • 执行沙箱中的脚本

  • 所以,
    local script = loadstring "display(math.log(2, 3))"
    local env = {display = print, math = math, string = string}
    setfenv(script, env)
    pcall(script)

    打印
    0.69314718055995

    然而
    local script = loadstring "print(math.log(2, 3))"
    local env = {display = print, math = math, string = string}
    setfenv(script, env)
    pcall(script)

    失败
    false   [string "print(math.log(2, 3))"]:1: attempt to call global 'print' (a nil value)

    关于Lua Sandbox 具有特殊功能的泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7857101/

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