• 3.1
  • 3.2
  • 5.0
  • Версия документации: 6.1

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

18 марта 2015 г.

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

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

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

Чтобы исправить эту проблему, функция Strip_tags() теперь будет возвращать исходный ввод, если обнаружит, что длина обрабатываемой строки увеличилась. Помните, что НЕ дается абсолютно НИКАКОЙ гарантии того, что результаты strip_tags() будут безопасными для HTML. Поэтому НИКОГДА не отмечайте безопасным результат вызова strip_tags() без его предварительного экранирования, например, с помощью escape().

Смягчение возможной XSS-атаки через пользовательское перенаправление

В некоторых случаях 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 (:ticket:24427).

Back to Top