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

8 июля 2015 г.

Django 1.7.9 исправляет несколько проблем безопасности и ошибок в 1.7.8.

Возможность отказа в обслуживании путем заполнения хранилища сессий

В предыдущих версиях Django серверные части сеанса создавали новую пустую запись в хранилище сеанса в любое время, когда request.session к нему обращались, и в файлах cookie запроса был указан сеансовый ключ, для которого еще не было записи сеанса. Это может позволить злоумышленнику легко создавать множество новых записей сеанса, просто отправляя повторяющиеся запросы с неизвестными ключами сеанса, потенциально заполняя хранилище сеансов или вызывая выселение записей сеансов других пользователей.

Встроенные серверные программы сеанса теперь создают запись сеанса только в том случае, если сеанс фактически изменен; пустые записи сеанса не создаются. Таким образом, этот потенциальный DoS теперь возможен только в том случае, если сайт решит предоставить анонимным пользователям представление, изменяющее сеанс.

Поскольку каждый встроенный серверный модуль сеанса был исправлен отдельно (а не исправлением в основной структуре сеансов), разработчики сторонних серверных модулей сеанса должны проверить, присутствует ли такая же уязвимость в их внутреннем интерфейсе, и исправить это, если это так.

Возможность внедрения заголовка, поскольку валидаторы принимают новые строки во вводе

Некоторые встроенные валидаторы Django ( EmailValidator серьезно) не запрещали символы новой строки (из-за использования $ вместо \Z в регулярных выражениях). Если вы используете значения с символом новой строки в HTTP-ответе или заголовках электронной почты, вы можете пострадать от атак путем внедрения заголовков. Сам Django не уязвим, потому HttpResponse что утилиты отправки почты django.core.mail запрещают перевод строки в заголовках HTTP и SMTP соответственно. Хотя валидаторы были исправлены в Django, если вы создаете HTTP-ответы или сообщения электронной почты другими способами, рекомендуется убедиться, что эти методы также запрещают перевод строки. Вы также можете проверить, что любые существующие данные в вашем приложении не содержат неожиданных символов новой строки.

validate_ipv4_address() , validate_slug() И URLValidator также затронуты, однако, как в Django 1.6 GenericIPAddresseField , IPAddressField , SlugField и URLField поле формы , которые используют эти валидатор всех полосы ввода, поэтому возможность перевода строки ввода данных существует только тогда , когда вы используете эти валидатор вне поля формы ,

Недокументированная, внутренне неиспользуемая validate_integer() функция теперь более строгая, поскольку она проверяет с помощью регулярного выражения вместо простого int() преобразования значения с использованием и проверки того, было ли вызвано исключение.

Исправления

  • Предотвращена потеря свойств null / column при переименовании полей баз данных MySQL ( # 24817 ).not null
  • Исправлено SimpleTestCase.assertRaisesMessage() на Python 2.7.10 ( # 24903 ).

Copyright ©2020 All rights reserved