跳转到主要内容

受限Python是Python语言的定义子集,允许将程序输入到一个可信环境中。

项目描述

https://github.com/zopefoundation/RestrictedPython/actions/workflows/tests.yml/badge.svg https://coveralls.io/repos/github/zopefoundation/RestrictedPython/badge.svg?branch=master Documentation Status Current version on PyPI Supported Python versions https://github.com/zopefoundation/RestrictedPython/raw/master/docs/logo.jpg

RestrictedPython

RestrictedPython 是一个帮助定义 Python 语言子集的工具,允许将程序输入到可信环境中。RestrictedPython 不是一个沙箱系统或安全环境,但它有助于定义一个可信环境并在其中执行不可信代码。

有关完整文档,请参阅 http://restrictedpython.readthedocs.io/

示例

以下提供两个示例,以帮助理解 RestrictedPython 的基本功能。

无问题的代码示例

Python 允许您执行大量命令。这不会对任何系统造成伤害。

>>> from RestrictedPython import compile_restricted
>>> from RestrictedPython import safe_globals
>>>
>>> source_code = """
... def example():
...     return 'Hello World!'
... """
>>>
>>> loc = {}
>>> byte_code = compile_restricted(source_code, '<inline>', 'exec')
>>> exec(byte_code, safe_globals, loc)
>>>
>>> loc['example']()
'Hello World!'

有问题的代码示例

此示例直接在 Python 中执行可能会损害您的系统。

>>> from RestrictedPython import compile_restricted
>>> from RestrictedPython import safe_globals
>>>
>>> source_code = """
... import os
...
... os.listdir('/')
... """
>>> byte_code = compile_restricted(source_code, '<inline>', 'exec')
>>> exec(byte_code, safe_globals, {})
Traceback (most recent call last):
ImportError: __import__ not found

为 RestrictedPython 贡献

如果您想帮助维护 RestrictedPython 并做出贡献,请参阅文档 贡献页面

变更

7.3 (2024-09-30)

  • 提高 safer_getattr 的安全性级别,允许应用程序将其用作 getattr 实现。此类使用现在应遵循相同的策略,并提供与基于 RestrictedPythonsafe_builtins 的直接属性访问相同级别的保护。

  • 防止通过 AttributeError.objstring 模块泄露信息。

7.2 (2024-08-02)

  • 移除可能因最新 setuptools 版本导致安装问题的不需要的 setuptools 遗留物。

  • 添加对单模式语句/执行的支持。

  • 修复 safer_builtins 中提供的 safer_getattr 方法中潜在的中断能力。

7.1 (2024-03-14)

  • 添加对 matmul (@) 操作符的支持。

7.0 (2023-11-17)

向后不兼容的更改
  • 停止支持 Python 3.6。

功能
  • 官方支持 Python 3.12。

修复
  • 防止 Python 3.12 中 ast.Strast.Num 的 DeprecationWarnings。

  • 禁止使用某些属性来访问受限 Python 内部。 (CVE-2023-37271)

  • 通过 Python 的“格式”功能修复信息泄露问题(str 和其实例的 formatformat_map 方法,以及 string.Formatter)。 (CVE-2023-41039)

6.0 (2022-11-03)

向后不兼容的更改
  • 停止支持 Python 2.7 和 3.5。

功能
  • 官方支持 Python 3.11。

  • 允许使用 Python 3.11 的异常组和 except*(PEP 654)功能。

5.2 (2021-11-19)

  • 记录 __name__ 是定义类所需的。

  • 添加对 Python 3.10 的支持。审查 Python 3.10 的变更日志未发现需要RestrictedPython采取行动的更改。

  • 当使用 Python 3.8+ 时避免弃用警告。(#192

5.1 (2020-10-07)

功能
  • 添加对(Python 3.8+)赋值表达式(即 := 操作符)的支持。

  • 在检查该版本中语法更改的安全性影响后,添加对 Python 3.9 的支持。

  • 添加对 bytessorted 内置函数的支持(#186)。

文档
  • 记录 compile_restricted 函数的参数 mode#157)。

  • 修复 compile_restricted_function 的文档 (#158)

修复
  • 修复 compile_restricted_function 中的无文本 SyntaxErrors (#181)

  • 移除对 setuptools 的依赖 (#189)

5.0 (2019-09-03)

破坏性变更
  • 从 4.0 版本开始,撤销对 ... (省略号) 语句的允许,因为这不是支持 Python 3.8 所必需的。省略号语句的安全影响并不完全清楚,且未被检查。... (省略号) 语句再次被禁止。

功能
  • 支持 Python 3.6+ 中的 f-strings (#123)

4.0 (2019-05-10)

自 3.6.0 版本以来的变更

破坏性变更
  • compile_restricted* 函数现在返回一个 namedtuple CompileResult,而不是简单的 tuple

  • 移除 3.x 版本的旧实现:RCompile.pySelectCompiler.pyMutatingWorker.pyRestrictionMutator.pytests/verify.py

  • 移除对长时间弃用的 sets 模块的支持。

功能
  • 主要基于 Python AST 模块进行重写。[loechel (Alexander Loechel), icemac (Michael Howitz), stephan-hof (Stephan Hofmockel), tlotze (Thomas Lotze)]

  • 添加对 Python 3.5、3.6、3.7 的支持。

  • 从 3.8.0a3 发布开始,添加对 Python 3.8 的初步支持。

  • 当使用非 CPython 的其他 Python 实现时发出警告,因为在使用除 CPython 之外的其他版本时使用 RestrictedPython 不安全。有关 PyPy 的信息,请参阅 https://bitbucket.org/pypy/pypy/issues/2653

  • 允许 ... (省略号) 语句。这是支持 Python 3.8 所必需的。

  • 允许 yieldyield from 语句。现在在 RestrictedPython 中可以正常使用生成器函数。

  • 允许在类上定义以下魔术方法。(#104) 它们不能直接调用,只能通过内置的方式使用(例如类实例化或比较)

    • __init__

    • __contains__

    • __lt__

    • __le__

    • __eq__

    • __ne__

    • __gt__

    • __ge__

  • 禁止使用类似 from a import * 的导入(称为星号导入),因为这允许导入以下划线开头的名称,可能会覆盖受保护的内置函数。(#102

  • 允许在 RestrictionCapableEval.eval() 的默认实现中使用列表推导。

  • 切换到 pytest 作为测试运行器。

  • 将测试覆盖率提升到 100%。

错误修复
  • 改进 .Guards.safer_getattr 以防止访问以下划线开头的名称。(#142

3.6.0 (2010-07-09)

  • 添加对使用 from x import y 格式在导入过程中分配的名称的名称检查。

  • 添加对 Python 2.7 中使用多上下文 with 语句分配别名时的名称检查测试。

  • 添加对 Python 2.7 中字典和集合推导迭代器保护测试。

3.6.0a1 (2010-06-05)

  • 移除对 DocumentTemplate.sequence 的支持 - 这已在 DocumentTemplate 包内部处理。

3.5.2 (2010-04-30)

  • 移除对 zope.testing 的测试依赖。

3.5.1 (2009-03-17)

  • Utilities 模块添加测试。

  • 导入 Python 的 sets 模块时过滤 DeprecationWarnings。

3.5.0 (2009-02-09)

  • 停止对 Python 2.1 / 2.2 的旧版支持(__future__ 导入的 nested_scopes / generators)。

3.4.3 (2008-10-26)

  • 修复弃用警告:在 Python 2.6 中,with 现在是一个保留关键字。这意味着 RestrictedPython 应该现在在 Python 2.6 上运行。感谢 Ranjith Kannikara,GSoC 学生提供的补丁。

  • 为三元 if 表达式和 with 关键字以及上下文管理器添加测试。

3.4.2 (2007-07-28)

  • 将主页 URL 更改为 PyPI 网站

  • 改进 README.txt

3.4.1 (2007-06-23)

3.4.0 (2007-06-04)

  • RestrictedPython 现在作为一个独立的项目有自己的发布周期。

  • 与 Zope 2 树中的 RestrictedPython 同步。

3.2.0 (2006-01-05)

  • 对应于 Zope 3.2.0 发布版中提供的 RestrictedPython 包版本。

  • 自 3.1.0 版本以来没有变化。

3.1.0 (2005-10-03)

  • 对应于 Zope 3.1.0 发布版中提供的 RestrictedPython 包版本。

  • 移除未使用的 fossil 模块,SafeMapping

  • random 替换弃用的 whrandom 模块(为向后兼容性别名到 whrandom)。

3.0.0 (2004-11-07)

  • 对应于 Zope X3.0.0 发布版中提供的 RestrictedPython 包版本。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。

源分布

RestrictedPython-7.3.tar.gz (448.8 kB 查看哈希值)

上传时间

构建分布

RestrictedPython-7.3-py3-none-any.whl (27.1 kB 查看哈希值)

上传时间 Python 3