Примечания к выпуску 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';