【问题标题】:Can Lupa be used to run untrusted lua code in python?可以使用 Lupa 在 python 中运行不受信任的 lua 代码吗?
【发布时间】:2013-07-01 12:19:09
【问题描述】:

假设我用register_eval=Falseattribute_filter 创建了LuaRuntime,它可以防止访问除一些python 函数之外的任何东西。假设 lua 代码无法执行 os.system("rm -rf *") 或类似的事情是否安全?

【问题讨论】:

  • 使用所有 I/O 库和其他您希望禁止删除的内容编译自定义 Lua 可能更安全。即使这样,DOS 攻击也很容易(只需编写一个无限循环)。
  • @delnan 好点,我目前的计划是生成一个单独的进程并使用 resource 模块来限制 CPU 和 RAM 的使用
  • 一般来说,只有当你的生活完全、积极地依赖它时,才执行不受信任的代码。就像,有些人拿着枪对着年头和/或对着你所爱的人的头,威胁说如果你不这样做就开枪。假设 any 沙箱可以被打破(是的,DoS 更容易)。谷歌浏览器有突破。任何虚拟机都有突破。

标签: python lua lupa


【解决方案1】:

Lupa doc看:

限制 Lua 访问 Python 对象

Lupa 提供了一种简单的机制来控制对 Python 对象的访问。每个属性访问都可以通过如下的过滤函数...

它没有提到阻止或限制对 Lua 本身提供的设施的访问。如果没有对 LuaRuntime 环境进行其他修改,那么 lua 脚本确实可以执行类似 os.execute("rm -rf *") 的操作。

要控制 lua 脚本在哪种环境中工作,您可以在运行脚本之前使用 setfenvgetfenv 对脚本进行沙箱处理。例如:

import lupa
L = lupa.LuaRuntime()
sandbox = L.eval("{}")
setfenv = L.eval("setfenv")

sandbox.print   = L.globals().print
sandbox.math    = L.globals().math
sandbox.string  = L.globals().string
sandbox.foobar  = foobar
# etc...

setfenv(0, sandbox)

现在执行L.execute("os.execute('rm -rf *')") 之类的操作会导致脚本错误。

【讨论】:

    猜你喜欢
    • 2017-11-05
    • 1970-01-01
    • 2019-08-23
    • 1970-01-01
    • 2020-10-30
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    相关资源
    最近更新 更多