Skip to main content

RestrictedPython 是 Python 语言的一个定义子集,它允许将程序输入提供到受信任的环境中。

项目描述

https://api.travis-ci.com/zopefoundation/RestrictedPython.svg?branch=master https://coveralls.io/repos/github/zopefoundation/RestrictedPython/badge.svg?branch=master 文件状态 PyPI 上的当前版本 支持的 Python 版本 https://github.com/zopefoundation/RestrictedPython/raw/master/docs/logo.jpg

受限Python

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

变化

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 的支持。

  • 添加对字节排序内置函数的支持(#186

文档
  • compile_restricted函数的文档参数模式( #157 )

  • 修复compile_restricted_function的文档 (#158

修复
  • 使用没有文本的语法错误修复compile_restricted_function ( #181 )

  • 删除对setuptools的安装依赖。(#189

5.0 (2019-09-03)

重大变化
  • 从 4.0 开始,恢复...(省略号)语句的容差。不需要支持 Python 3.8。省略号声明的安全含义并非 100% 明确且未经检查。...(省略号)再次被禁止。

特征
  • 在 Python 3.6+ 中添加对 f 字符串的支持。(#123

4.0 (2019-05-10)

自 3.6.0 以来的变化:

重大变化
  • compile_restricted*函数现在返回一个 namedtuple CompileResult而不是一个简单的tuple

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

  • 放弃对长期弃用的集合模块的支持。

特征
  • 大部分基于 Python AST 模块完全重写。[loechel (Alexander Loechel)、icemac (Michael Howitz)、stephan-hof (Stephan Hofmockel)、tlotze (Thomas Lotze)]

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

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

  • 使用除 CPython 之外的其他 Python 实现时发出警告,因为将 RestrictedPython 与除 CPyton 之外的其他版本一起使用是不安全的。有关 PyPy,请参阅https://bitbucket.org/pypy/pypy/issues/2653

  • 允许...(省略号)语句。它需要支持 Python 3.8。

  • 允许yieldyield from语句。生成器函数现在可以在 RestrictedPython 中工作。

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

    • __在里面__

    • __包含__

    • __lt__

    • __le__

    • __eq__

    • __ne__

    • __gt__

    • __ge__

  • 现在禁止从 import *(所谓的星号导入)等导入,因为它们允许导入以下划线开头的名称,这可能会覆盖受保护的内置插件。(#102

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

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

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

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

3.6.0 (2010-07-09)

  • 使用from x import y格式为导入期间分配的名称添加名称检查 。

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

  • 在 Python 2.7 中添加测试以保护 dict 和 set 理解的迭代器。

3.6.0a1 (2010-06-05)

  • 删除对DocumentTemplate.sequence的支持- 这是在 DocumentTemplate 包本身中处理的。

3.5.2 (2010-04-30)

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

3.5.1 (2009-03-17)

  • 为实用程序模块添加测试。

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

3.5.0 (2009-02-09)

  • 放弃对 Python 2.1 / 2.2 的旧版支持(嵌套范围/生成器的__future__导入。)。

3.4.3 (2008-10-26)

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

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

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 包的版本。

  • 删除未使用的化石模块SafeMapping

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

3.0.0 (2004-11-07)

  • 对应于作为 Zope X3.0.0 版本的一部分提供的 RestrictedPython 包的版本。

下载文件

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

源分布

RestrictedPython-5.2.tar.gz (444.8 kB 查看哈希

已上传 source

内置分布

RestrictedPython-5.2-py2.py3-none-any.whl (28.0 kB 查看哈希

已上传 py2 py3