Примечания к выпуску 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
«Sprepare_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 ).