Примечания к выпуску Django 1.7.7¶
18 марта 2015
Django 1.7.7 исправляет несколько ошибок и проблем безопасности в 1.7.6.
Возможность отказа в обслуживании с strip_tags()
¶
Last year strip_tags()
was changed to work
iteratively. The problem is that the size of the input it’s processing can
increase on each iteration which results in an infinite loop in
strip_tags()
. This issue only affects versions of Python that haven’t
received a bugfix in HTMLParser; namely Python < 2.7.7 and
3.3.5. Some operating system vendors have also backported the fix for the
Python bug into their packages of earlier versions.
Чтобы исправить эту проблему, strip_tags()
теперь будет возвращать исходный ввод, если обнаружит, что длина обрабатываемой строки увеличивается. Помните, что нет абсолютно никакой гарантии того, что результаты strip_tags()
будут безопасны для HTML. Поэтому НИКОГДА не помечайте безопасным результат вызова strip_tags()
без предварительного экранирования, например, с помощью escape()
.
Устранена возможная XSS-атака через URL-адреса перенаправления, заданные пользователем¶
Django полагается на ввод пользователя в некоторых случаях (например, django.contrib.auth.views.login()
и i18n), чтобы перенаправить пользователя на URL «при успехе». Проверки безопасности для этих перенаправлений (а именно django.utils.http.is_safe_url()
) принимали URL с ведущими управляющими символами и поэтому считали URL типа \x08javascript:...
безопасными. В настоящее время эта проблема не затрагивает Django, поскольку мы помещаем этот URL только в заголовок ответа Location
, и браузеры, похоже, игнорируют JavaScript там. Браузеры, которые мы тестировали, также рассматривают URL с префиксом из управляющих символов, таких как %08//example.com
, как относительные пути, поэтому перенаправление на небезопасную цель также не является проблемой.
Однако если разработчик полагается на is_safe_url()
для обеспечения безопасных целей перенаправления и помещает такой URL в ссылку, он может пострадать от XSS-атаки, поскольку некоторые браузеры, такие как Google Chrome, игнорируют управляющие символы в начале URL в якоре href
.
Исправления¶
- Исправлено переименование классов в миграциях, когда переименование подкласса приводило к записи неверного состояния для объектов, ссылающихся на суперкласс (#24354).
- Прекращена запись файлов миграции в режиме сухого выполнения при объединении конфликтов миграции. Когда
makemigrations --merge
вызывается вместе сverbosity=3
, файл миграции записывается вstdout
(#24427).