August 1, 2019
Django 2.2.4 fixes security issues and several bugs in 2.2.3.
django.utils.text.Truncator
¶If django.utils.text.Truncator
’s chars()
and words()
methods
were passed the html=True
argument, they were extremely slow to evaluate
certain inputs due to a catastrophic backtracking vulnerability in a regular
expression. The chars()
and words()
methods are used to implement the
truncatechars_html
and truncatewords_html
template
filters, which were thus vulnerable.
The regular expressions used by Truncator
have been simplified in order to
avoid potential backtracking issues. As a consequence, trailing punctuation may
now at times be included in the truncated output.
strip_tags()
¶Due to the behavior of the underlying HTMLParser
,
django.utils.html.strip_tags()
would be extremely slow to evaluate
certain inputs containing large sequences of nested incomplete HTML entities.
The strip_tags()
method is used to implement the corresponding
striptags
template filter, which was thus also vulnerable.
strip_tags()
now avoids recursive calls to HTMLParser
when progress
removing tags, but necessarily incomplete HTML entities, stops being made.
Remember that absolutely NO guarantee is provided about the results of
strip_tags()
being HTML safe. So NEVER mark safe the result of a
strip_tags()
call without escaping it first, for example with
django.utils.html.escape()
.
JSONField
/HStoreField
¶Key and index lookups
for
JSONField
and key lookups
for HStoreField
were subject to SQL injection, using a suitably crafted dictionary, with
dictionary expansion, as the **kwargs
passed to QuerySet.filter()
.
django.utils.encoding.uri_to_iri()
¶If passed certain inputs, django.utils.encoding.uri_to_iri()
could lead
to significant memory usage due to excessive recursion when re-percent-encoding
invalid UTF-8 octet sequences.
uri_to_iri()
now avoids recursion when re-percent-encoding invalid UTF-8
octet sequences.
QuerySet.union()
,
intersection()
, or difference()
by a field type present more than
once results in the wrong ordering being used (#30628).contains
lookup on
DateRangeField
or
DateTimeRangeField
, if the right
hand side of an expression is the same type (#30621).'\x00'
) (#30506).Nov 02, 2020