Примечания к выпуску Django 4.2.6¶
4 октября 2023
В Django 4.2.6 исправлена проблема безопасности со степенью серьезности «умеренная» и несколько ошибок в 4.2.5.
CVE-2023-43665: Возможность отказа в обслуживании в django.utils.text.Truncator
¶
После исправления CVE-2019-14232 были пересмотрены и улучшены регулярные выражения, используемые в реализации методов django.utils.text.Truncator
chars()
и words()
(с html=True
). Однако эти регулярные выражения по-прежнему демонстрировали линейную сложность обратного хода, поэтому при передаче очень длинного, потенциально деформированного HTML-ввода оценка все равно происходила медленно, что приводило к потенциальной уязвимости отказа в обслуживании.
Методы chars()
и words()
используются для реализации шаблонных фильтров truncatechars_html
и truncatewords_html
, которые, таким образом, также были уязвимы.
Ввод, обрабатываемый Truncator
при работе в режиме HTML, был ограничен первыми пятью миллионами символов, чтобы избежать потенциальных проблем с производительностью и памятью.
Исправления¶
Исправлена регрессия в Django 4.2.5, когда переопределение устаревших параметров
DEFAULT_FILE_STORAGE
иSTATICFILES_STORAGE
в тестах приводило к мутации главногоSTORAGES
(#34821).Исправлена регрессия в Django 4.2, которая приводила к ненужному приведению строковых полей (
CharField
,EmailField
,TextField
,CICharField
,CIEmailField
иCITextField
), используемых при поиске__isnull
на PostgreSQL. Как следствие, индексы, использующие выражение__isnull
или условие, созданные до версии Django 4.2, не использовались планировщиком запросов, что приводило к снижению производительности (#34840).Возможно, вам придется пересоздать такие индексы, созданные в вашей базе данных с Django 4.2 по 4.2.5, поскольку они содержат ненужную заливку
::text
. Найдите индексы-кандидаты с помощью этого запроса:SELECT indexname, indexdef FROM pg_indexes WHERE indexdef LIKE '%::text IS %NULL';