Релиз Django 1.4.2

17 октября 2012

Это второй релиз безопасности в ветке Django 1.4.

Уязвимость в заголовке хоста

В некоторых местах Django – независимо от пользовательских приложений – используют полный URL, включая имя домена, которое генерируется из HTTP заголовка Host. Отражение таких атак находится за пределами возможностей Django и требует правильно сконфигурированного web-сервера. В документации можно найти несколько заметок на этот счёт.

Встроенный обработчик заголовка Host по-прежнему уязвим, как нам и сообщалось ранее. В django.http.HttpRequest.get_host() в версиях Django 1.3.3 и 1.4.1 неверно обрабатывает информацию о логине/пароле пользователя. Например, следующий код вернёт “validsite.com”:

Host: validsite.com:random@evilsite.com

Пользуясь этим, злоумышленник может вызвать методы Django – в частности восстановление пароля – для создания и отображения произвольных URL-адреса для пользователей.

Чтобы исключить такую возможность, был изменён HttpRequest.get_host(). Теперь при разборе заголовка Host, который содержит потенциально опасный контент (например, имя пользователя или пароль) будет вызывать исключение django.core.exceptions.SuspiciousOperation.

Подробнее об этом изменении можно посмотреть в security advisory.

Нарушение обратной совместимости

  • Новые аргументы для конструктора GenericIPAddressField адаптированы таким образом, чтобы совпадали с остальными полями модели. Теперь два первых аргумента verbose_name и name.

Остальные исправления и изменения

  • Подкласс HTMLParser использует соответствующую версию Python (#18239).

  • Добавлен аргумент batch_size в qs.bulk_create() (#17788).

  • Исправлена небольшая регрессия в фильтрах админки, когда неправильно форматированная дата, которая передавалась как параметр, вызывала необработанное исключение ValidationError (#18530).

  • Исправлен бесконечный цикл при запросе доступа в шаблоне (#18979)

  • Исправлена совместимость с Python 2.5

  • Исправлена ошибка с экранированием имён файлов в заголовке Content-Disposition (#19006).

  • Контекстные опции для тегов trans и blocktrans теперь принимают строки в одинарных кавычках (#18881).

  • Многочисленные улучшения и исправления документации.