19 февраля 2013
Патч Django 1.4.4 исправляет 4 проблемы безопасности в ветке 1.4, а также множество других ошибок как в коде, так и в документации.
Это четвёртый релиз безопасности для ветки Django 1.4.
Некоторые алгоритмы Django – вне зависимости от пользовательских приложений – использовали полные URL-ы, включая доменное имя, которое генерируется из заголовка запроса Host. В документации Django уже некоторое время назад были опубликованы рекомендации по конфигурированию web-серверов, которые помогут обезопасить Django-приложение. Тем не менее даже в случае корректной настройки оставались лазейки для использования этой уязвимости.
По этой причине в Django 1.4.4 добавлена новая настройка ALLOWED_HOSTS, в котором должен быть явно указан список допустимых хостов для этого сайта. Запрос с неверным заголовком Host при вызове request.get_host() сгенерирует исключение SuspiciousOperation. Подробнее можно посмотреть в документации по настройке ALLOWED_HOSTS.
Значением по умолчанию в Django 1.3.6 является ['*'] (любой хост). Это оставлено для обратной совместимости, но мы настоятельно рекомендуем ужесточить это условие.
Валидация хоста отключена, когда DEBUG установлен в True, а также при запуске тестов.
XML-парсер в стандартной поставке Python уязвимы для ряда атак через внешние сущности и расширения. Django же использует его для десериализации фикстур БД. В принципе, в них не должно быть плохих данных, но мы решили перестраховаться и сделали невозможным атаки через это направление.
Эти вопросы проходят под номерами CVE-2013-1664 и CVE-2013-1665 стандартной библиотеки. Подробнее можно посмотреть на from the Python security team.
Сериализатор Django не создаёт DTD, так что это не должно быть проблемой при обычной загрузке восстановлении через dumpdata/loaddata, однако если вы применяете сторонний XML через loaddata убедитесь, что он не содержит DTD.
Предыдущие версии Django не проверяли и не ограничивали в размере наборы форм, делая возможным создание огромного их количества, что исчерпывало всю доступную память на сервере.
В Django 1.4.4 все наборы форм имеют ограничение в количестве оных (по умолчанию 1000, но это значение может быть увеличено через аргумент max_num).
В предыдущих версиях Django админ без права редактирования всё ещё мог видеть unicode представления объектов через историю. Теперь добавлено ограничение на просмотр лога.
Предотвращение утечки состояния транзакции между запросами (#19707).
Изменён синтаксис SQL-команд для совместимости с MySQL 4 (#19702).
Добавлена поддержка обратной совместимости со старыми “несолёными” паролями (#18144).
Многочисленные улучшения и исправления документации.
Mar 31, 2016