Примечания к выпуску Django 2.2.4¶
1 августа 2019 года
Django 2.2.4 исправляет проблемы безопасности и несколько ошибок в 2.2.3.
CVE-2019-14232: Возможность отказа в обслуживании в django.utils.text.Truncator
¶
Если методам django.utils.text.Truncator
chars()
и words()
передавался аргумент html=True
, они крайне медленно оценивали определенные входные данные из-за катастрофической уязвимости обратного хода в регулярном выражении. Методы chars()
и words()
используются для реализации фильтров шаблонов truncatechars_html
и truncatewords_html
, которые, таким образом, были уязвимы.
Регулярные выражения, используемые Truncator
, были упрощены, чтобы избежать потенциальных проблем с обратным ходом. Как следствие, в усеченном выводе теперь иногда может присутствовать пропущенная пунктуация.
CVE-2019-14233: Возможность отказа в обслуживании в strip_tags()
¶
Из-за поведения базового HTMLParser
, django.utils.html.strip_tags()
будет крайне медленно оценивать определенные входные данные, содержащие большие последовательности вложенных неполных HTML-сущностей. Метод strip_tags()
используется для реализации соответствующего фильтра шаблонов striptags
, который, таким образом, также был уязвим.
strip_tags()
теперь позволяет избежать рекурсивных вызовов HTMLParser
, когда прогресс удаления тегов, но обязательно неполных сущностей HTML, прекращается.
Помните, что нет абсолютно никакой гарантии того, что результаты strip_tags()
будут безопасны для HTML. Поэтому НИКОГДА не помечайте безопасным результат вызова strip_tags()
, не экранировав его сначала, например, с помощью django.utils.html.escape()
.
CVE-2019-14234: Возможность SQL-инъекции при поиске ключей и индексов для JSONField
/HStoreField
¶
Key and index lookups
для django.contrib.postgres.fields.JSONField
и key lookups
для HStoreField
были подвержены SQL-инъекции, используя соответствующим образом составленный словарь с расширением словаря в качестве **kwargs
, передаваемого в QuerySet.filter()
.
CVE-2019-14235: Потенциальное исчерпание памяти в django.utils.encoding.uri_to_iri()
¶
Если передать определенные входные данные, django.utils.encoding.uri_to_iri()
может привести к значительному расходу памяти из-за чрезмерной рекурсии при повторном кодировании недопустимых последовательностей октетов UTF-8.
uri_to_iri()
теперь позволяет избежать рекурсии при повторном кодировании недопустимых последовательностей октетов UTF-8.
Исправления¶
- Исправлена регрессия в Django 2.2, когда упорядочивание
QuerySet.union()
,intersection()
илиdifference()
по типу поля, присутствующему более одного раза, приводило к использованию неправильного порядка (#30628). - Исправлена ошибка миграции на PostgreSQL при добавлении проверочного ограничения с поиском
contains
наDateRangeField
илиDateTimeRangeField
, если правая часть выражения имеет тот же тип (#30621). - Исправлена регрессия в Django 2.2, при которой автозагрузка аварийно завершалась, если путь к файлу содержал нулевые символы (
'\x00'
) (#30506). - Исправлена регрессия в Django 2.2, при которой автозагрузка аварийно завершалась, если каталог переводов не может быть разрешен (#30647).