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

19 февраля 2013

Django 1.3.6 исправляет четыре проблемы безопасности, присутствовавшие в предыдущих выпусках Django серии 1.3.

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

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

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

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

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

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

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

Парсер XML в стандартной библиотеке Python уязвим для ряда атак через внешние сущности и расширение сущностей. Django использует этот парсер для десериализации фикстур базы данных в формате XML. Десериализатор приспособлений не предназначен для использования с ненадежными данными, но в целях безопасности в Django 1.3.6 десериализатор 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.3.6 все наборы форм имеют строго ограниченное максимальное количество форм (1000 по умолчанию, хотя его можно установить выше с помощью аргумента фабрики форм max_num).

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

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

Вернуться на верх