467 lines
14 KiB
Text
467 lines
14 KiB
Text
Metadata-Version: 2.1
|
|
Name: RestrictedPython
|
|
Version: 8.0
|
|
Summary: RestrictedPython is a defined subset of the Python language which allows to provide a program input into a trusted environment.
|
|
Home-page: https://github.com/zopefoundation/RestrictedPython
|
|
Author: Zope Foundation and Contributors
|
|
Author-email: zope-dev@zope.dev
|
|
License: ZPL-2.1
|
|
Project-URL: Documentation, https://restrictedpython.readthedocs.io/
|
|
Project-URL: Source, https://github.com/zopefoundation/RestrictedPython
|
|
Project-URL: Tracker, https://github.com/zopefoundation/RestrictedPython/issues
|
|
Keywords: restricted execution security untrusted code
|
|
Classifier: Development Status :: 6 - Mature
|
|
Classifier: License :: OSI Approved :: Zope Public License
|
|
Classifier: Programming Language :: Python
|
|
Classifier: Operating System :: OS Independent
|
|
Classifier: Programming Language :: Python :: 3
|
|
Classifier: Programming Language :: Python :: 3.9
|
|
Classifier: Programming Language :: Python :: 3.10
|
|
Classifier: Programming Language :: Python :: 3.11
|
|
Classifier: Programming Language :: Python :: 3.12
|
|
Classifier: Programming Language :: Python :: 3.13
|
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
Classifier: Topic :: Security
|
|
Requires-Python: >=3.9, <3.14
|
|
Description-Content-Type: text/x-rst
|
|
License-File: LICENSE.txt
|
|
Provides-Extra: test
|
|
Requires-Dist: pytest; extra == "test"
|
|
Requires-Dist: pytest-mock; extra == "test"
|
|
Provides-Extra: docs
|
|
Requires-Dist: Sphinx; extra == "docs"
|
|
Requires-Dist: furo; extra == "docs"
|
|
|
|
.. image:: https://github.com/zopefoundation/RestrictedPython/actions/workflows/tests.yml/badge.svg
|
|
:target: https://github.com/zopefoundation/RestrictedPython/actions/workflows/tests.yml
|
|
|
|
.. image:: https://coveralls.io/repos/github/zopefoundation/RestrictedPython/badge.svg?branch=master
|
|
:target: https://coveralls.io/github/zopefoundation/RestrictedPython?branch=master
|
|
|
|
.. image:: https://readthedocs.org/projects/restrictedpython/badge/
|
|
:target: https://restrictedpython.readthedocs.org/
|
|
:alt: Documentation Status
|
|
|
|
.. image:: https://img.shields.io/pypi/v/RestrictedPython.svg
|
|
:target: https://pypi.org/project/RestrictedPython/
|
|
:alt: Current version on PyPI
|
|
|
|
.. image:: https://img.shields.io/pypi/pyversions/RestrictedPython.svg
|
|
:target: https://pypi.org/project/RestrictedPython/
|
|
:alt: Supported Python versions
|
|
|
|
.. image:: https://github.com/zopefoundation/RestrictedPython/raw/master/docs/logo.jpg
|
|
|
|
================
|
|
RestrictedPython
|
|
================
|
|
|
|
RestrictedPython is a tool that helps to define a subset of the Python language which allows to provide a program input into a trusted environment.
|
|
RestrictedPython is not a sandbox system or a secured environment, but it helps to define a trusted environment and execute untrusted code inside of it.
|
|
|
|
.. warning::
|
|
|
|
RestrictedPython only supports CPython. It does _not_ support PyPy and other Python implementations as it cannot provide its restrictions there.
|
|
|
|
For full documentation please see http://restrictedpython.readthedocs.io/.
|
|
|
|
Example
|
|
=======
|
|
|
|
To give a basic understanding what RestrictedPython does here two examples:
|
|
|
|
An unproblematic code example
|
|
-----------------------------
|
|
|
|
Python allows you to execute a large set of commands.
|
|
This would not harm any system.
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> 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!'
|
|
|
|
Problematic code example
|
|
------------------------
|
|
|
|
This example directly executed in Python could harm your system.
|
|
|
|
.. code-block:: pycon
|
|
|
|
>>> 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
|
|
|
|
Contributing to RestrictedPython
|
|
--------------------------------
|
|
|
|
If you want to help maintain RestrictedPython and contribute, please refer to
|
|
the documentation `Contributing page
|
|
<https://restrictedpython.readthedocs.io/en/latest/contributing/index.html>`_.
|
|
|
|
Changes
|
|
=======
|
|
|
|
8.0 (2025-01-23)
|
|
----------------
|
|
|
|
Backwards incompatible changes
|
|
++++++++++++++++++++++++++++++
|
|
|
|
- Disallow ``try/except*`` clauses due to a possible sandbox escape and
|
|
probable uselessness of this feature in the context of ``RestrictedPython``.
|
|
In addition, remove ``ExceptionGroup`` from ``safe_builtins`` (as useful only
|
|
with ``try/except*``). - This feature was introduced into
|
|
``RestrictedPython`` in version 6.0 for Python 3.11+. (CVE-2025-22153)
|
|
|
|
- Drop support for Python 3.8.
|
|
|
|
Features
|
|
++++++++
|
|
|
|
- Update setuptools version pin.
|
|
(`#292 <https://github.com/zopefoundation/RestrictedPython/issues/292>`_)
|
|
|
|
|
|
7.4 (2024-10-09)
|
|
----------------
|
|
|
|
- Allow to use the package with Python 3.13.
|
|
|
|
- Drop support for Python 3.7.
|
|
|
|
- Provide new function ``RestrictedPython.Guards.safer_getattr_raise``.
|
|
It is similar to ``safer_getattr`` but handles its parameter
|
|
``default`` like ``getattr``, i.e. it raises ``AttributeError``
|
|
if the attribute lookup fails and this parameter is not provided,
|
|
fixes `#287 <https://github.com/zopefoundation/RestrictedPython/issues/287>`_.
|
|
|
|
|
|
7.3 (2024-09-30)
|
|
----------------
|
|
|
|
- Increase the safety level of ``safer_getattr`` allowing applications to use
|
|
it as ``getattr`` implementation. Such use should now follow the same policy
|
|
and give the same level of protection as direct attribute access in an
|
|
environment based on ``RestrictedPython``'s ``safe_builtints``.
|
|
- Prevent information leakage via ``AttributeError.obj``
|
|
and the ``string`` module. (CVE-2024-47532)
|
|
|
|
|
|
7.2 (2024-08-02)
|
|
----------------
|
|
|
|
- Remove unneeded setuptools fossils that may cause installation problems
|
|
with recent setuptools versions.
|
|
- Add support for single mode statements / execution.
|
|
- Fix a potential breakout capability in the provided ``safer_getattr`` method
|
|
that is part of the ``safer_builtins``.
|
|
|
|
|
|
7.1 (2024-03-14)
|
|
----------------
|
|
|
|
- Add support for the matmul (``@``) operator.
|
|
|
|
|
|
7.0 (2023-11-17)
|
|
----------------
|
|
|
|
Backwards incompatible changes
|
|
++++++++++++++++++++++++++++++
|
|
|
|
- Drop support for Python 3.6.
|
|
|
|
Features
|
|
++++++++
|
|
|
|
- Officially support Python 3.12.
|
|
|
|
Fixes
|
|
+++++
|
|
|
|
- Prevent DeprecationWarnings from ``ast.Str`` and ``ast.Num`` on Python 3.12
|
|
|
|
- Forbid using some attributes providing access to restricted Python internals.
|
|
(CVE-2023-37271)
|
|
|
|
- Fix information disclosure problems through Python's "format" functionality
|
|
(``format`` and ``format_map`` methods on ``str`` and its instances,
|
|
``string.Formatter``). (CVE-2023-41039)
|
|
|
|
|
|
6.0 (2022-11-03)
|
|
----------------
|
|
|
|
Backwards incompatible changes
|
|
++++++++++++++++++++++++++++++
|
|
|
|
- Drop support for Python 2.7 and 3.5.
|
|
|
|
Features
|
|
++++++++
|
|
|
|
- Officially support Python 3.11.
|
|
|
|
- Allow to use the Python 3.11 feature of exception groups and except\*
|
|
(PEP 654).
|
|
|
|
|
|
5.2 (2021-11-19)
|
|
----------------
|
|
|
|
- Document that ``__name__`` is needed to define classes.
|
|
|
|
- Add support for Python 3.10. Auditing the Python 3.10 change log did not
|
|
reveal any changes which require actions in RestrictedPython.
|
|
|
|
- Avoid deprecation warnings when using Python 3.8+.
|
|
(`#192 <https://github.com/zopefoundation/RestrictedPython/issues/192>`_)
|
|
|
|
|
|
5.1 (2020-10-07)
|
|
----------------
|
|
|
|
Features
|
|
++++++++
|
|
|
|
- Add support for (Python 3.8+) assignment expressions (i.e. the ``:=`` operator)
|
|
|
|
- Add support for Python 3.9 after checking the security implications of the
|
|
syntax changes made in that version.
|
|
|
|
- Add support for the ``bytes`` and ``sorted`` builtins
|
|
(`#186 <https://github.com/zopefoundation/RestrictedPython/issues/186>`_)
|
|
|
|
Documentation
|
|
+++++++++++++
|
|
|
|
- Document parameter ``mode`` for the ``compile_restricted`` functions
|
|
(`#157 <https://github.com/zopefoundation/RestrictedPython/issues/157>`_)
|
|
|
|
- Fix documentation for ``compile_restricted_function``
|
|
(`#158 <https://github.com/zopefoundation/RestrictedPython/issues/158>`_)
|
|
|
|
Fixes
|
|
+++++
|
|
|
|
- Fix ``compile_restricted_function`` with SyntaxErrors that have no text
|
|
(`#181 <https://github.com/zopefoundation/RestrictedPython/issues/181>`_)
|
|
|
|
- Drop install dependency on ``setuptools``.
|
|
(`#189 <https://github.com/zopefoundation/RestrictedPython/issues/189>`_)
|
|
|
|
|
|
5.0 (2019-09-03)
|
|
----------------
|
|
|
|
Breaking changes
|
|
++++++++++++++++
|
|
|
|
- Revert the allowance of the ``...`` (Ellipsis) statement, as of 4.0. It is
|
|
not needed to support Python 3.8.
|
|
The security implications of the Ellipsis Statement is not 100 % clear and is
|
|
not checked. ``...`` (Ellipsis) is disallowed again.
|
|
|
|
Features
|
|
++++++++
|
|
|
|
- Add support for f-strings in Python 3.6+.
|
|
(`#123 <https://github.com/zopefoundation/RestrictedPython/issues/123>`_)
|
|
|
|
|
|
4.0 (2019-05-10)
|
|
----------------
|
|
|
|
Changes since 3.6.0:
|
|
|
|
Breaking changes
|
|
++++++++++++++++
|
|
|
|
- The ``compile_restricted*`` functions now return a
|
|
``namedtuple CompileResult`` instead of a simple ``tuple``.
|
|
|
|
- Drop the old implementation of version 3.x: `RCompile.py`,
|
|
`SelectCompiler.py`, `MutatingWorker.py`, `RestrictionMutator.py` and
|
|
`tests/verify.py`.
|
|
|
|
- Drop support for long-deprecated ``sets`` module.
|
|
|
|
Security related issues
|
|
+++++++++++++++++++++++
|
|
|
|
- RestrictedPython now ships with a default implementation for
|
|
``_getattr_`` which prevents from using the ``format()`` method on
|
|
str/unicode as it is not safe, see:
|
|
http://lucumr.pocoo.org/2016/12/29/careful-with-str-format/
|
|
|
|
**Caution:** If you do not already have secured the access to this
|
|
``format()`` method in your ``_getattr_`` implementation use
|
|
``RestrictedPython.Guards.safer_getattr()`` in your implementation to
|
|
benefit from this fix.
|
|
|
|
Features
|
|
++++++++
|
|
|
|
- Mostly complete rewrite based on Python AST module.
|
|
[loechel (Alexander Loechel), icemac (Michael Howitz),
|
|
stephan-hof (Stephan Hofmockel), tlotze (Thomas Lotze)]
|
|
|
|
- Add support for Python 3.5, 3.6, 3.7.
|
|
|
|
- Add preliminary support for Python 3.8. as of 3.8.0a3 is released.
|
|
|
|
- Warn when using another Python implementation than CPython as it is not safe
|
|
to use RestrictedPython with other versions than CPyton.
|
|
See https://bitbucket.org/pypy/pypy/issues/2653 for PyPy.
|
|
|
|
- Allow the ``...`` (Ellipsis) statement. It is needed to support Python 3.8.
|
|
|
|
- Allow `yield` and `yield from` statements.
|
|
Generator functions would now work in RestrictedPython.
|
|
|
|
- Allow the following magic methods to be defined on classes.
|
|
(`#104 <https://github.com/zopefoundation/RestrictedPython/issues/104>`_)
|
|
They cannot be called directly but by the built-in way to use them (e. g.
|
|
class instantiation, or comparison):
|
|
|
|
+ ``__init__``
|
|
+ ``__contains__``
|
|
+ ``__lt__``
|
|
+ ``__le__``
|
|
+ ``__eq__``
|
|
+ ``__ne__``
|
|
+ ``__gt__``
|
|
+ ``__ge__``
|
|
|
|
- Imports like ``from a import *`` (so called star imports) are now forbidden
|
|
as they allow to import names starting with an underscore which could
|
|
override protected build-ins.
|
|
(`#102 <https://github.com/zopefoundation/RestrictedPython/issues/102>`_)
|
|
|
|
- Allow to use list comprehensions in the default implementation of
|
|
``RestrictionCapableEval.eval()``.
|
|
|
|
- Switch to pytest as test runner.
|
|
|
|
- Bring test coverage to 100 %.
|
|
|
|
Bug fixes
|
|
+++++++++
|
|
|
|
- Improve `.Guards.safer_getattr` to prevent accessing names starting with
|
|
underscore.
|
|
(`#142 <https://github.com/zopefoundation/RestrictedPython/issues/142>`_)
|
|
|
|
|
|
3.6.0 (2010-07-09)
|
|
------------------
|
|
|
|
- Add name check for names assigned during imports using the
|
|
``from x import y`` format.
|
|
|
|
- Add test for name check when assigning an alias using multiple-context
|
|
``with`` statements in Python 2.7.
|
|
|
|
- Add tests for protection of the iterators for dict and set comprehensions
|
|
in Python 2.7.
|
|
|
|
3.6.0a1 (2010-06-05)
|
|
--------------------
|
|
|
|
- Remove support for ``DocumentTemplate.sequence`` - this is handled in the
|
|
DocumentTemplate package itself.
|
|
|
|
3.5.2 (2010-04-30)
|
|
------------------
|
|
|
|
- Remove a testing dependency on ``zope.testing``.
|
|
|
|
3.5.1 (2009-03-17)
|
|
------------------
|
|
|
|
- Add tests for ``Utilities`` module.
|
|
|
|
- Filter DeprecationWarnings when importing Python's ``sets`` module.
|
|
|
|
3.5.0 (2009-02-09)
|
|
------------------
|
|
|
|
- Drop legacy support for Python 2.1 / 2.2 (``__future__`` imports
|
|
of ``nested_scopes`` / ``generators``.).
|
|
|
|
3.4.3 (2008-10-26)
|
|
------------------
|
|
|
|
- Fix deprecation warning: ``with`` is now a reserved keyword on
|
|
Python 2.6. That means RestrictedPython should run on Python 2.6
|
|
now. Thanks to Ranjith Kannikara, GSoC Student for the patch.
|
|
|
|
- Add tests for ternary if expression and for ``with`` keyword and
|
|
context managers.
|
|
|
|
3.4.2 (2007-07-28)
|
|
------------------
|
|
|
|
- Changed homepage URL to the PyPI site
|
|
|
|
- Improve ``README.txt``.
|
|
|
|
3.4.1 (2007-06-23)
|
|
------------------
|
|
|
|
- Fix http://www.zope.org/Collectors/Zope/2295: Bare conditional in
|
|
a Zope 2 PythonScript followed by a comment causes SyntaxError.
|
|
|
|
3.4.0 (2007-06-04)
|
|
------------------
|
|
|
|
- RestrictedPython now has its own release cycle as a separate project.
|
|
|
|
- Synchronized with RestrictedPython from Zope 2 tree.
|
|
|
|
3.2.0 (2006-01-05)
|
|
------------------
|
|
|
|
- Corresponds to the verison of the RestrictedPython package shipped
|
|
as part of the Zope 3.2.0 release.
|
|
|
|
- No changes from 3.1.0.
|
|
|
|
3.1.0 (2005-10-03)
|
|
------------------
|
|
|
|
- Corresponds to the verison of the RestrictedPython package shipped
|
|
as part of the Zope 3.1.0 release.
|
|
|
|
- Remove unused fossil module, ``SafeMapping``.
|
|
|
|
- Replaced use of deprecated ``whrandom`` module with ``random`` (aliased
|
|
to ``whrandom`` for backward compatibility).
|
|
|
|
3.0.0 (2004-11-07)
|
|
------------------
|
|
|
|
- Corresponds to the verison of the RestrictedPython package shipped
|
|
as part of the Zope X3.0.0 release.
|