• 3.1
  • 3.2
  • 5.0
  • Версия документации: 6.1

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

4 октября 2023 г.

В Django 4.2.6 исправлена ​​проблема безопасности с уровнем серьезности «средний» и несколько ошибок в версии 4.2.5.

CVE-2023-43665: Возможность отказа в обслуживании в django.utils.text.Truncator.

После исправления CVE 2019-14232 регулярные выражения, используемые в реализации методов chars() и``words()`` django.utils.text.Truncator (с 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';
    
Back to Top