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

8 июля 2015 г.

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

Кроме того, он django.utils.deprecation.RemovedInDjango20Warningбыл переименован в, RemovedInDjango110Warningпоскольку дорожная карта версии была пересмотрена до 1.9, 1.10, 1.11 (LTS), 2.0 (без поддержки Python 2). Для обратной совместимости RemovedInDjango20Warningостается как импортируемый псевдоним.

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

В предыдущих версиях 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()преобразования значения с использованием и проверки того, возникло ли исключение.

Возможность отказа в обслуживании при проверке URL

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

Исправления

  • Фиксированный BaseRangeField.prepare_value()использовать каждый base_field«S prepare_value()метод ( # 24841 ).
  • Исправлен сбой, makemigrationsесли модуль миграции отсутствует __init__.pyили является файлом ( # 24848 ).
  • Исправлено QuerySet.exists()возвращение некорректных результатов после аннотации с Count()( # 24835 ).
  • Исправлено HStoreField.has_changed()( # 24844 ).
  • Отменена оптимизация обработчика контекста шаблона CSRF, которая вызвала регресс ( # 24836 ).
  • Исправлена ​​регрессия, из-за которой процессоры контекста шаблона перезаписывали переменные, установленные в a RequestContextпосле его создания ( # 24847 ).
  • Предотвращена потеря свойств null/ column при переименовании полей баз данных MySQL ( # 24817 ).not null
  • Исправлен сбой при использовании обратного отношения «один к одному» в ModelAdmin.list_display( # 24851 ).
  • Исправлено цитирование SQL при переименовании поля AutoFieldв PostgreSQL ( # 24892 ).
  • Исправлено отсутствие уникального ограничения при изменении поля с primary_key=Trueна unique=True( # 24893 ).
  • Исправлено засорение набора запросов при использовании prefetch_related()после удаления объектов ( # 24831 ).
  • Допускается использование choicesболее 1 дня с DurationField ( # 24897 ).
  • Исправлен сбой при загрузке сжатых миграций из двух приложений с зависимостью между ними, когда частично применялись замененные миграции зависимого приложения ( # 24895 ).
  • Исправлена ​​запись заявленного статуса для сжатых (замещающих) миграций ( # 24628 ).
  • Исправлены аннотации набора запросов при использовании Caseвыражений с exclude() ( # 24833 ).
  • Исправлено продвижение присоединения для нескольких Caseвыражений. Аннотирование запроса с помощью нескольких Caseвыражений может неожиданно отфильтровать результаты ( # 24924 ).
  • Исправлено использование преобразований в подзапросах ( # 24744 ).
  • Исправлено SimpleTestCase.assertRaisesMessage()на Python 2.7.10 ( # 24903 ).
  • Обеспечена лучшая обратная совместимость для verbosityаргумента в optparseкомандах управления путем преобразования его в целое число ( # 24769 ).
  • Исправлено prefetch_related()в базах данных, отличных от PostgreSQL, для моделей, использующих первичные ключи UUID ( # 24912 ).
  • Исправлено удаление unique_togetherограничений в MySQL ( # 24972 ).
  • Исправлен сбой при загрузке изображений с типами MIME, которые Pillow не обнаруживает, такими как растровое изображение, в forms.ImageField( # 24948 ).
  • Исправлена ​​регрессия при удалении модели через админку, у которой есть GenericRelationс related_query_name( # 24940 ).
  • Реализованы значения, отличные от ASCII, для ForeignKey.related_namePython 3 путем исправления ложной проверки системы ( # 25016 ).
  • Исправлены встроенные формы, которые используют родительский объект с UUIDFieldпервичным ключом и дочерний объект с AutoFieldпервичным ключом ( # 24958 ).
  • Исправлена ​​регрессия в unordered_listфильтре шаблона для определенных входов ( # 25031 ).
  • Исправлена ​​регрессия в URLValidatorнедействительных доменах верхнего уровня Punycode ( # 25059 ).
  • Улучшенный pyinotify runserverопрос ( # 23882 ).

Copyright ©2021 All rights reserved