Примечания к выпуску Django 1.7.7

18 марта 2015

Django 1.7.7 исправляет несколько ошибок и проблем безопасности в 1.7.6.

Возможность отказа в обслуживании с strip_tags()

В прошлом году strip_tags() был изменен для итеративной работы. Проблема заключается в том, что размер входных данных, которые он обрабатывает, может увеличиваться на каждой итерации, что приводит к бесконечному циклу в strip_tags(). Эта проблема затрагивает только те версии Python, которые не получили a bugfix in HTMLParser; а именно Python < 2.7.7 и 3.3.5. Некоторые поставщики операционных систем также перенесли исправление ошибки в Python в свои пакеты более ранних версий.

Чтобы исправить эту проблему, 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).
Вернуться на верх