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

19 февраля 2013

Django 1.4.4 исправляет четыре проблемы безопасности, присутствовавшие в предыдущих выпусках Django серии 1.4, а также устраняет несколько других ошибок и вносит многочисленные улучшения в документацию.

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

Отравление заголовка хоста

Some parts of Django – independent of end-user-written applications – make use of full URLs, including domain name, which are generated from the HTTP Host header. Django’s documentation has for some time contained notes advising users on how to configure web servers to ensure that only valid Host headers can reach the Django application. However, it has been reported to us that even with the recommended web server configurations there are still techniques available for tricking many common web servers into supplying the application with an incorrect and possibly malicious Host header.

По этой причине в Django 1.4.4 добавлена новая настройка ALLOWED_HOSTS, содержащая явный список допустимых имен хостов/доменов для этого сайта. Запрос с заголовком Host, не соответствующим записи в этом списке, вызовет SuspiciousOperation, если будет вызван request.get_host(). Более подробную информацию смотрите в документации к параметру ALLOWED_HOSTS.

Значение по умолчанию для этого параметра в Django 1.4.4 равно ['*'] (соответствие любому хосту), для обратной совместимости, но мы настоятельно рекомендуем всем сайтам устанавливать более строгое значение.

Эта проверка хоста отключена, когда DEBUG равно True или при выполнении тестов.

Десериализация XML

Парсер XML в стандартной библиотеке Python уязвим для ряда атак через внешние сущности и расширение сущностей. Django использует этот парсер для десериализации XML-форматированных фиксов базы данных. Этот десериализатор не предназначен для использования с недоверенными данными, но в целях безопасности в Django 1.4.4 десериализатор XML отказывается анализировать XML-документ с DTD (определение DOCTYPE), что закрывает эти пути для атак.

Эти проблемы в стандартной библиотеке Python - CVE-2013-1664 и CVE-2013-1665. Более подробная информация доступна from the Python security team.

XML-сериализатор Django не создает документы с DTD, поэтому это не должно вызвать никаких проблем при типичном переходе от dumpdata к loaddata, но если вы передаете свои собственные XML-документы команде управления loaddata, вам нужно убедиться, что они не содержат DTD.

Исчерпание памяти формы

Предыдущие версии Django не проверяли и не ограничивали данные о количестве форм, предоставляемые клиентом в форме управления набором форм, что позволяло исчерпать доступную память сервера, заставляя его создавать очень большое количество форм.

В Django 1.4.4 все наборы форм имеют строго ограниченное максимальное количество форм (1000 по умолчанию, хотя его можно установить выше с помощью аргумента фабрики форм max_num).

Утечка информации о просмотре истории администратора

В предыдущих версиях Django пользователь-администратор, не имеющий прав на изменение модели, мог просматривать Unicode-представление экземпляров через свой журнал истории администратора. Django 1.4.4 теперь ограничивает просмотр журнала истории администратора для объекта только пользователями с правами на изменение этой модели.

Другие исправления и изменения

  • Предотвращение утечки состояния транзакции от одного запроса к другому (#19707).
  • Изменен синтаксис команды SQL для совместимости с MySQL 4 (#19702).
  • Добавлена обратная совместимость со старыми несолеными паролями MD5 (#18144).
  • Многочисленные улучшения и исправления документации.
Вернуться на верх