跳转到主要内容

为Zope环境中Python脚本的受限执行提供支持。

项目描述

https://github.com/zopefoundation/Products.PythonScripts/actions/workflows/tests.yml/badge.svg https://coveralls.io/repos/github/zopefoundation/Products.PythonScripts/badge.svg?branch=master Current version on PyPI Supported Python versions

Products.PythonScripts

Python脚本产品提供对Python脚本的受限执行的支持,将它们暴露为Zope环境中的可调用对象。

提供额外模块的访问

Python脚本对象默认只能使用有限的“安全”模块。在与Zope合作的过程中,您可能希望将其他模块提供给脚本对象。

PythonScripts产品中的Utility.py模块提供了一种简单的方法,可以在整个站点上使模块可供脚本对象使用。在将模块提供给Python脚本之前,您应该仔细考虑该模块被滥用或误用的可能性,因为所有拥有创建和编辑Python脚本权限的用户都将能够使用模块中定义的任何函数和类。在某些情况下,您可能希望创建一个自定义模块,仅从另一个模块导入名称子集,并使该自定义模块可供使用以降低滥用的风险。

在您的站点上使模块可供Python脚本使用的最简单方法是,在您的Products目录中创建一个包含__init__.py文件的新目录。在Zope启动时,将导入此“产品”,并且您在__init__.py中做出的任何模块断言都将生效。下面是如何操作的:

  • 在您的Products目录中(根据您的部署模型,可以是Zope安装的lib/python中的目录或Zope安装的根目录),创建一个名为“GlobalModules”的新目录。

  • 在新的目录中创建一个名为__init__.py的文件。

  • 编辑__init__.py文件,并添加对位于Products.PythonScripts.Utility模块中的‘allow_module’函数的调用,传递要启用供脚本使用的模块名称。例如:

    # Global module assertions for Python scripts
    from Products.PythonScripts.Utility import allow_module
    
    allow_module('base64')
    allow_module('re')
    allow_module('DateTime.DateTime')

    此示例将添加“base64”,“re”和“DateTime”包中的“DateTime”模块,供Python脚本使用。请注意,对于包(点分隔的名称),包路径中的每个模块都将对脚本对象可用。

  • 重新启动您的Zope服务器。重启后,您在自定义产品中启用的模块将可供Python脚本使用。

如果您尝试导入的包/模块不在您的Products目录中,将包/模块中的安全断言放在其中不起作用。

这是因为该包/模块必须被导入以使其中包含的安全断言生效,但这样做将需要导入一个没有任何安全声明的模块,这与限制Python环境的目的是相违背的。

产品在Zope启动时以不同的方式工作。通过将包/模块放在您的Products目录中,您正在断言,其中包括它对于Zope检查该包/模块的安全性声明的安全性。因此,请小心将非Zope产品包或模块放在Products目录中。

更改日志

5.0 (2023-02-01)

  • 删除对Python 2.7,3.5,3.6的支持。

4.15 (2022-12-16)

  • 修复针对Zope 4的测试中的buildout配置隐蔽错误。

  • 添加对Python 3.11的支持。

4.14 (2022-07-13)

  • 添加对Python 3.10的支持。

  • .tests.testBindings中删除未使用的类SecurityManagerRivilegedUser

4.13 (2021-07-02)

  • 确保“Manager”用户始终可以修改代理角色(#50

  • 添加对Python 3.9的支持。

  • 更新对isort版本5的配置。

4.12 (2020-06-03)

  • file参数添加到工厂函数manage_addPythonScript#45

  • 修复从文件更新现有脚本时的TypeError#43

4.11 (2020-02-11)

  • 修复与字符串编码相关的PUT问题。

4.10 (2020-02-11)

  • 重写manage_DAVget以获取正确的可编辑源(#40

4.9 (2019-10-09)

  • 通过关闭默认内容文件防止资源警告/错误(#39

4.8 (2019-09-04)

  • 对于不允许的标识符显示适当的错误消息(#33

  • 恢复历史 ZMI 选项卡,因为 Zope 再次支持它(#38

4.7 (2019-05-21)

  • 确保模板的 _body 属性在 Python 3 中是原生字符串(#30

4.6 (2019-04-15)

  • 修复一个严重错误,该错误阻止页面模板编译(#27

4.5 (2019-04-07)

  • 为 Python 2 和 3 提供单个默认脚本内容模板

  • 使用 importlib 而不是 imp 防止弃用警告(#24

  • 由于过时的默认脚本内容防止语法警告(#26

  • 在添加 Python 脚本时允许输入标题(#25

  • 为 GitHub 和 PyPI 添加徽章

  • 包元数据清理

  • 清理了 tox 测试配置

4.4 (2019-03-08)

  • 使用 setup.py 中的 python_requires 指定支持的 Python 版本(Zope#481

  • 添加对 Python 3.8 的支持

4.3 (2019-02-09)

  • 对于空文件上传显示消息而不是异常(#21

4.2 (2018-10-11)

  • 添加对 Python 3.7 的支持。

  • 停止支持 Python 3.4。

  • 由于编译代码现在存储在 __code__ 而不是 func_code 上,强制重新编译脚本。

  • 添加兼容 Python 3 的默认脚本。 (#10)

  • 修复自 3.0 版本以来损坏的 Products.PythonScripts.standard 的安全声明(Zope#209

  • 修复当在 PythonScript 中输入包含语法错误的代码时发生的 HTTP-500 错误。现在它像其他错误一样显示为错误消息。(#11

  • 将测试更新到 RestrictedPython >= 4.0b4,因此至少需要此版本。(#17

  • 更新 Bootstrap ZMI 的 ZMI HTML 代码。(#16

  • 删除对 Zope 4.0a2 以来不再存在的旧版本的兼容性支持。

4.1 (2017-06-19)

  • 添加对 Python 3.4 到 3.6 的支持。

4.0.1 (2017-02-06)

  • 从编辑模板中删除 bobobase_modification_time

4.0 (2016-08-06)

  • 添加对 Zope 4.0a2 中 WebDAV 变更的兼容性。

3.0 (2016-07-18)

  • 删除 HelpSys 支持。

2.13.2 (2012-09-09)

  • 修复我们 standard 模块的模块安全声明。

2.13.1 (2012-09-09)

  • LP #1047318:调整测试。

2.13.0 (2010-07-10)

  • 作为独立包发布。

项目详情


下载文件

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

源代码分发

Products.PythonScripts-5.0.tar.gz (29.0 kB 查看哈希值)

上传时间 源代码

构建分发

Products.PythonScripts-5.0-py3-none-any.whl (33.8 kB 查看哈希值)

上传时间 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面