О релизе Django 1.3.6

19 февраля 2013

Django 1.3.6 исправляет 4 проблемы в ветке 1.3.

Это шестой патч в ветке Django 1.3.

Опасный заголовок Host

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.3.6 добавлена новая настройка ALLOWED_HOSTS, в котором должен быть явно указан список допустимых хостов для этого сайта.

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

Валидация хоста отключена, когда DEBUG установлен в True, а также при запуске тестов.

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

XML-парсер в стандартной поставке Python уязвимы для ряда атак через внешние сущности и расширения. Django же использует его для десериализации фикстур БД. В принципе, в них не должно быть плохих данных, но мы решили перестраховаться и сделали невозможным атаки через это направление.

Эти вопросы проходят под номерами CVE-2013-1664 и CVE-2013-1665 стандартной библиотеки. Подробнее можно посмотреть на from the Python security team.

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

Нехватка памяти для наборов форм

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

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

Утечка истории посещения админки

В предыдущих версиях Django админ без права редактирования всё ещё мог видеть unicode представления объектов через историю. Теперь добавлено ограничение на просмотр лога.