首页 > 编程语言 >【攻防技术系列】-- Python沙箱逃逸

【攻防技术系列】-- Python沙箱逃逸

时间:2024-05-12 10:41:02浏览次数:27  
标签:exec -- restricted 代码 Python 沙箱 执行

Python 是一种强大而灵活的编程语言,但在某些情况下,可能需要运行不受信任的代码,同时又希望限制它的行为,以防止对系统的不良影响。这时,Python 沙箱就成为一种有用的工具,它可以帮助你在安全的环境中运行不受信任的代码。本文将探讨 Python 沙箱的概念、常见的沙箱技术以及如何避免沙箱逃逸。

什么是 Python 沙箱?

Python 沙箱是一个受限制的执行环境,允许您运行不受信任的 Python 代码,同时限制其访问系统资源和执行危险操作。Python 沙箱通常用于以下情况:

在网络应用程序中运行用户提交的代码,以防止恶意代码执行。
在测试和调试期间,隔离和检查不受信任的代码,以确保其不会破坏系统。
在某些自动化任务中,限制脚本的行为,以防止不必要的风险。

常见的 Python 沙箱技术

Python 沙箱可以使用多种技术来实现。以下是一些常见的 Python 沙箱技术:

1. 使用 exec 或 eval

Python 提供了内置的 exec 和 eval 函数,允许动态执行代码。可以在运行时将代码传递给这些函数,并在受控环境中执行它们。然而,要注意,exec 和 eval 本身不提供沙箱保护措施,因此需要谨慎使用。

code = "print('Hello, World!')"
exec(code)

2. 使用模块级别的沙箱

一种常见的做法是使用模块级别的沙箱,例如 RestrictedPythonPyExecJS。这些工具可以在独立的执行环境中运行 Python 代码,并限制其访问系统资源。它们通常提供一组允许和禁止的操作,以控制代码的行为。


from RestrictedPython import compile_restricted, safe_builtins

code = """
result = 1 + 1
print(result)
"""

restricted_globals = {"__builtins__": safe_builtins}
bytecode = compile_restricted(code, "<string>", "exec")
exec(bytecode, restricted_globals)

3. 使用容器化技术

另一种方法是使用容器化技术,如 Docker,将不受信任的代码运行在一个独立的容器中。这种方式可以更好地隔离代码,确保其无法访问主机系统资源。

docker run -it --rm python:3.9 python -c "print('Hello, from inside the container!')"

4. 使用专用的沙箱库

有一些 Python 沙箱库,如 PySandboxPyPySandbox,专门设计用于创建安全的执行环境。这些库提供了更高级的控制和保护措施,以确保代码在受控制的环境中运行。
沙箱逃逸和如何避免

沙箱逃逸是指不受信任的代码绕过了沙箱的保护机制,获取了不应该访问的资源或执行了不应该执行的操作。避免沙箱逃逸是确保沙箱有效性的关键部分。以下是一些避免沙箱逃逸的最佳实践:

1. 限制访问权限

在执行沙箱代码之前,限制其访问权限。只允许访问必要的资源和操作,禁止访问系统敏感信息和危险操作。

2. 使用白名单

定义一个白名单,列出允许的操作和函数调用。在沙箱环境中,只允许执行白名单中的操作,禁止执行其他操作。这样可以有效地控制代码的行为。

3. 监控和审计

定期监控沙箱环境中的代码执行,以及执行期间的系统活动。如果发现异常或可疑行为,立即采取行动。

4. 使用专门的沙箱工具

使用专门的沙箱工具和库,这些工具经过专门设计和测试,可以提供更强大的保护措施,减少沙箱逃逸的可能性。
示例:使用 RestrictedPython 进行沙箱执行

下面是一个使用 RestrictedPython 进行沙箱执行的示例。首先,安装 restrictedpython 库:

pip install RestrictedPython

然后,可以使用以下代码创建一个简单的沙箱环境:

from RestrictedPython import compile_restricted, safe_builtins

# 不受信任的代码
code = """
import os
print(os.listdir('/'))
"""

# 限制可用的内置函数和模块
restricted_globals = {"__builtins__": safe_builtins}

# 编译和执行受限制的代码
bytecode = compile_restricted(code, "<string>", "exec")
try:
    exec(bytecode, restricted_globals)
except Exception as e:
    print("沙箱逃逸:", e)

在上述代码中,使用 RestrictedPython 编译和执行不受信任的代码。由于在 restricted_globals 中限制了可用的内置函数和模块,因此不受信任的代码无法执行 os.listdir 操作,从而实现了沙箱保护。

总结

Python 沙箱是一种有用的工具,可以帮助大家在安全的环境中运行不受信任的代码。了解沙箱的概念、常见的技术以及如何避免沙箱逃逸是确保代码安全性的关键。在实际应用中,根据需求选择合适的沙箱技术,并采取适当的保护措施,以确保沙箱环境的有效性和安全性。

原创 python

标签:exec,--,restricted,代码,Python,沙箱,执行
From: https://www.cnblogs.com/o-O-oO/p/18187570

相关文章

  • 洛谷题单指南-动态规划3-Zuma
    原题链接:https://www.luogu.com.cn/problem/CF607B题意解读:从一组整数中取连续的回文子串,求最少几次可以取完。解题思路:状态表示:设dp[i][j]表示取i~j之间的回文子串所需的最少次数,a[i]表示第i个数状态转移:如果a[i]==a[j],dp[i][j]=dp[i+1][j-1],因为首尾如果相等,其必然可以......
  • 如何编译Godot(Godot & Godot with C#)
    要在Windows下编译Godot,需要以下环境:VisualStudioCommunity:使用最新版本。MinGW-w64:可以替代VisualStudio。请务必将其安装/配置为使用posix线程模型。使用MinGW编译主分支时,需要GCC9或更高版本。Python3.6+:确保在安装程序中启用将Python添加到环境变量......
  • IceRPC之服务器地址与TLS的安全性->快乐的RPC
    作者引言.Net8.0下的新RPC很高兴啊,我们来到了IceRPC之服务器地址与TLS的安全性->快乐的RPC,基础引导,让自已不在迷茫,快乐的畅游世界。服务器地址ServerAddress了解服务器地址的概念和语法。语法服务器地址URI具有以下语法:protocol://host[:port][?name=value][&nam......
  • H2 数据库介绍(1)--简介
    H2是一个使用Java编写的数据库,支持内存、文件等数据存储模式,可用于测试及Demo应用;本文主要介绍其基本概念及安装。1、H2特点速度很快、开源、JDBCAPI嵌入式和服务器模式;基于磁盘或内存的数据库事务支持,多版本并发基于浏览器的控制台应用程序加密数据库全文搜索纯......
  • 使用 Playwright 控制浏览器的启动、停止和等待
    简介Playwright是一个强大的自动化测试工具,它不仅可以模拟用户在浏览器中的行为,还能够灵活控制浏览器的启动、停止和等待操作。在本文中,我们将探讨如何使用Playwright进行这些操作。启动停止浏览器我们之前是使用with方法来控制浏览器启动和停止,现在我们来介绍一下使用star......
  • 使用 Playwright 进行元素定位
    前言在自动化测试和网页爬取中,定位页面元素是一项重要的任务。Playwright提供了多种方式来定位页面元素,包括通过CSS选择器、XPath和文本内容等。在本文中,我们将介绍如何使用Playwright进行元素定位。CSS选择器定位元素使用CSS选择器是一种常见且灵活的方式来定位页面......
  • playwright使用:启动浏览器与多种运行方式
    前言在本文中,我们将介绍如何使用Playwright这一现代化的浏览器自动化工具来启动浏览器,并深入了解其运行方式。Playwright是一个功能强大的工具,可以帮助开发人员自动化测试、网页截图、信息提取等任务。它支持多种浏览器,包括Chrome、Firefox和WebKit。启动浏览器上一篇文章中,我......
  • 071、洛阳女儿行
    071、洛阳女儿行唐●王维洛阳女儿对门居,才可颜容十五余。良人玉勒乘骢马,侍女金盘脍鲤鱼。画阁珠楼尽相望,红桃绿柳垂檐向。罗帏送上七香车,宝扇迎归九华帐。狂夫富贵在青春,意气骄奢剧季伦。自怜碧玉亲教舞,不惜珊瑚持与人。春窗曙灭九微火,九微片片飞花璅。戏罢曾无理曲时,妆......
  • git
    安装https://git-scm.com/downloadsgitgitee和gitlabGit:是一种版本控制软件,是一个命令,是一种工具。-----GitHub:是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放,公有仓库免费,部分私有仓库收费,全球最大的开源代码托管平台--》git的远程仓库Gitee:(码云)......
  • 如何同时或者按顺序间隔启动多个程序
    首先,需要用到的这个工具:度娘网盘提取码:qwu2蓝奏云提取码:2r1z1、打开工具,切换到定时器模块,快捷键:Ctrl+3 2、新建一个定时器,我这里演示同时打开多个程序(比如同时启动多个QQ,或者多个微信等),那就把单次数量提高,如果想每次执行这个定时器里面的3个事件,那单次数量就是写3,我......