From 8d29005524b141da8ff4d9b9bc4d858d43bb7154 Mon Sep 17 00:00:00 2001 From: Tim Graham Date: Sun, 15 Sep 2013 14:14:26 -0400 Subject: [PATCH] Cleaned up 1.5.4/1.4.8 release notes --- docs/howto/error-reporting.txt | 6 ++++- docs/releases/1.4-alpha-1.txt | 7 +++--- docs/releases/1.4-beta-1.txt | 7 +++--- docs/releases/1.4.8.txt | 32 +++++++++++++++++++++++++++ docs/releases/1.4.txt | 9 ++++---- docs/releases/1.5.4.txt | 40 ++++++++++++++++++++++++++++++++++ docs/releases/1.6.txt | 16 ++++++++++++++ docs/releases/1.7.txt | 8 ------- docs/releases/index.txt | 2 ++ 9 files changed, 108 insertions(+), 19 deletions(-) create mode 100644 docs/releases/1.4.8.txt create mode 100644 docs/releases/1.5.4.txt diff --git a/docs/howto/error-reporting.txt b/docs/howto/error-reporting.txt index 5ebed92187..54de19cef7 100644 --- a/docs/howto/error-reporting.txt +++ b/docs/howto/error-reporting.txt @@ -117,6 +117,8 @@ Filtering error reports Filtering sensitive information ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. currentmodule:: django.views.decorators.debug + Error reports are really helpful for debugging errors, so it is generally useful to record as much relevant information about those errors as possible. For example, by default Django records the `full traceback`_ for the @@ -240,11 +242,13 @@ attribute:: request.exception_reporter_filter = CustomExceptionReporterFilter() ... +.. currentmodule:: django.views.debug + Your custom filter class needs to inherit from :class:`django.views.debug.SafeExceptionReporterFilter` and may override the following methods: -.. class:: django.views.debug.SafeExceptionReporterFilter +.. class:: SafeExceptionReporterFilter .. method:: SafeExceptionReporterFilter.is_active(self, request) diff --git a/docs/releases/1.4-alpha-1.txt b/docs/releases/1.4-alpha-1.txt index cb218ac698..d47f624f5b 100644 --- a/docs/releases/1.4-alpha-1.txt +++ b/docs/releases/1.4-alpha-1.txt @@ -337,9 +337,10 @@ docs ` for more information. Error report filtering ~~~~~~~~~~~~~~~~~~~~~~ -Two new function decorators, :func:`sensitive_variables` and -:func:`sensitive_post_parameters`, were added to allow designating the -local variables and POST parameters which may contain sensitive +We added two function decorators, +:func:`~django.views.decorators.debug.sensitive_variables` and +:func:`~django.views.decorators.debug.sensitive_post_parameters`, to allow +designating the local variables and POST parameters that may contain sensitive information and should be filtered out of error reports. All POST parameters are now systematically filtered out of error reports for diff --git a/docs/releases/1.4-beta-1.txt b/docs/releases/1.4-beta-1.txt index 84b1bf6987..d670036463 100644 --- a/docs/releases/1.4-beta-1.txt +++ b/docs/releases/1.4-beta-1.txt @@ -375,9 +375,10 @@ docs ` for more information. Error report filtering ~~~~~~~~~~~~~~~~~~~~~~ -Two new function decorators, :func:`sensitive_variables` and -:func:`sensitive_post_parameters`, were added to allow designating the -local variables and POST parameters which may contain sensitive +We added two function decorators, +:func:`~django.views.decorators.debug.sensitive_variables` and +:func:`~django.views.decorators.debug.sensitive_post_parameters`, to allow +designating the local variables and POST parameters that may contain sensitive information and should be filtered out of error reports. All POST parameters are now systematically filtered out of error reports for diff --git a/docs/releases/1.4.8.txt b/docs/releases/1.4.8.txt new file mode 100644 index 0000000000..08dca4065e --- /dev/null +++ b/docs/releases/1.4.8.txt @@ -0,0 +1,32 @@ +========================== +Django 1.4.8 release notes +========================== + +*September 14, 2013* + +Django 1.4.8 fixes two security issues present in previous Django releases in +the 1.4 series. + +Denial-of-service via password hashers +-------------------------------------- + +In previous versions of Django, no limit was imposed on the plaintext +length of a password. This allowed a denial-of-service attack through +submission of bogus but extremely large passwords, tying up server +resources performing the (expensive, and increasingly expensive with +the length of the password) calculation of the corresponding hash. + +As of 1.4.8, Django's authentication framework imposes a 4096-byte +limit on passwords and will fail authentication with any submitted +password of greater length. + +Corrected usage of :func:`~django.views.decorators.debug.sensitive_post_parameters` in :mod:`django.contrib.auth`’s admin +------------------------------------------------------------------------------------------------------------------------- + +The decoration of the ``add_view`` and ``user_change_password`` user admin +views with :func:`~django.views.decorators.debug.sensitive_post_parameters` +did not include :func:`~django.utils.decorators.method_decorator` (required +since the views are methods) resulting in the decorator not being properly +applied. This usage has been fixed and +:func:`~django.views.decorators.debug.sensitive_post_parameters` will now +throw an exception if it's improperly used. diff --git a/docs/releases/1.4.txt b/docs/releases/1.4.txt index a013665ad3..0bd1da0ef8 100644 --- a/docs/releases/1.4.txt +++ b/docs/releases/1.4.txt @@ -507,10 +507,11 @@ docs ` for more information. Error report filtering ~~~~~~~~~~~~~~~~~~~~~~ -We added two function decorators, :func:`sensitive_variables` and -:func:`sensitive_post_parameters`, to allow designating the local variables -and POST parameters that may contain sensitive information and should be -filtered out of error reports. +We added two function decorators, +:func:`~django.views.decorators.debug.sensitive_variables` and +:func:`~django.views.decorators.debug.sensitive_post_parameters`, to allow +designating the local variables and POST parameters that may contain sensitive +information and should be filtered out of error reports. All POST parameters are now systematically filtered out of error reports for certain views (``login``, ``password_reset_confirm``, ``password_change`` and diff --git a/docs/releases/1.5.4.txt b/docs/releases/1.5.4.txt new file mode 100644 index 0000000000..68deeb5de0 --- /dev/null +++ b/docs/releases/1.5.4.txt @@ -0,0 +1,40 @@ +========================== +Django 1.5.4 release notes +========================== + +*September 14, 2013* + +This is Django 1.5.4, the fourth release in the Django 1.5 series. It addresses +two security issues and one bug. + +Denial-of-service via password hashers +-------------------------------------- + +In previous versions of Django, no limit was imposed on the plaintext +length of a password. This allowed a denial-of-service attack through +submission of bogus but extremely large passwords, tying up server +resources performing the (expensive, and increasingly expensive with +the length of the password) calculation of the corresponding hash. + +As of 1.5.4, Django's authentication framework imposes a 4096-byte +limit on passwords, and will fail authentication with any submitted +password of greater length. + +Corrected usage of :func:`~django.views.decorators.debug.sensitive_post_parameters` in :mod:`django.contrib.auth`’s admin +------------------------------------------------------------------------------------------------------------------------- + +The decoration of the ``add_view`` and ``user_change_password`` user admin +views with :func:`~django.views.decorators.debug.sensitive_post_parameters` +did not include :func:`~django.utils.decorators.method_decorator` (required +since the views are methods) resulting in the decorator not being properly +applied. This usage has been fixed and +:func:`~django.views.decorators.debug.sensitive_post_parameters` will now +throw an exception if it's improperly used. + +Bugfixes +======== + +* Fixed a bug that prevented a ``QuerySet`` that uses + :meth:`~django.db.models.query.QuerySet.prefetch_related` from being pickled + and unpickled more than once (the second pickling attempt raised an + exception) (#21102). diff --git a/docs/releases/1.6.txt b/docs/releases/1.6.txt index 34dc307527..b665d8cec5 100644 --- a/docs/releases/1.6.txt +++ b/docs/releases/1.6.txt @@ -780,6 +780,22 @@ as JSON requires string keys, you will likely run into problems if you are using non-string keys in ``request.session``. See the :ref:`session_serialization` documentation for more details. +4096-byte limit on passwords +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +.. note:: + This behavior was also added in the Django 1.5.4 and 1.4.8 security + releases. + +Historically, Django has imposed no length limit on plaintext +passwords. This enables a denial-of-service attack through submission +of bogus but extremely large passwords, tying up server resources +performing the (expensive, and increasingly expensive with the length +of the password) calculation of the corresponding hash. + +Django now imposes a 4096-byte limit on password length, and will fail +authentication with any submitted password of greater length. + Miscellaneous ~~~~~~~~~~~~~ diff --git a/docs/releases/1.7.txt b/docs/releases/1.7.txt index 3456c74ff0..3e247fd211 100644 --- a/docs/releases/1.7.txt +++ b/docs/releases/1.7.txt @@ -402,14 +402,6 @@ Miscellaneous Rationale behind this is removal of dependency of non-contrib code on contrib applications. -* Passwords longer than 4096 bytes in length will no longer work and will - instead raise a ``ValueError`` when using the hasher directory or the - built in forms shipped with ``django.contrib.auth`` will fail validation. - - The rationale behind this is a possibility of a Denial of Service attack when - using a slow password hasher, such as the default PBKDF2, and sending very - large passwords. - Features deprecated in 1.7 ========================== diff --git a/docs/releases/index.txt b/docs/releases/index.txt index 1b0d1a371d..5574ee964f 100644 --- a/docs/releases/index.txt +++ b/docs/releases/index.txt @@ -36,6 +36,7 @@ Final releases .. toctree:: :maxdepth: 1 + 1.5.4 1.5.3 1.5.2 1.5.1 @@ -46,6 +47,7 @@ Final releases .. toctree:: :maxdepth: 1 + 1.4.8 1.4.7 1.4.6 1.4.5