受限Python是Python语言的定义子集,允许将程序输入到一个可信环境中。
项目描述
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 实现。此类使用现在应遵循相同的策略,并提供与基于 RestrictedPython 的 safe_builtins 的直接属性访问相同级别的保护。
防止通过 AttributeError.obj 和 string 模块泄露信息。
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.Str 和 ast.Num 的 DeprecationWarnings。
禁止使用某些属性来访问受限 Python 内部。 (CVE-2023-37271)
通过 Python 的“格式”功能修复信息泄露问题(str 和其实例的 format 和 format_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 的支持。
添加对 bytes 和 sorted 内置函数的支持(#186)。
文档
修复
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.py、SelectCompiler.py、MutatingWorker.py、RestrictionMutator.py 和 tests/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 所必需的。
允许 yield 和 yield 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)
修复 http://www.zope.org/Collectors/Zope/2295:在 Zope 2 PythonScript 中的裸条件表达式后跟注释会导致 SyntaxError。
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 包版本。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定该选择哪个,请了解有关安装包的更多信息。