Примечания к выпуску 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_name Python 3 путем исправления ложной проверки системы ( # 25016 ).
  • Фиксированные встроенные формы, которые используют родительский объект с UUIDField первичным ключом и дочерний объект с AutoField первичным ключом ( # 24958 ).
  • Исправлена ​​регрессия в unordered_list фильтре шаблона для определенных входов ( # 25031 ).
  • Исправлена ​​регрессия в URLValidator недействительных доменах верхнего уровня Punycode ( # 25059 ).
  • Улучшенный pyinotify runserver опрос ( # 23882 ).

Copyright ©2020 All rights reserved