Django 2.0.3 版本发行说明
2018 年 3 月 6 日
Django 2.0.3 修复了 2.0.2 版本中的两个安全问题和一些错误。此外,还整合了来自 Transifex 的最新字符串翻译。
CVE-2018-7536: urlize
和 urlizetrunc
模板过滤器中的拒绝服务可能性问题
django.utils.html.urlize()
函数在处理某些输入时非常慢,这是由于两个正则表达式中的灾难性回溯漏洞引起的。urlize()
函数用于实现 urlize
和 urlizetrunc
模板过滤器,因此这两个过滤器也存在漏洞。
问题正则表达式被替换为具有相似行为的解析逻辑。
CVE-2018-7537: truncatechars_html
和 truncatewords_html
模板过滤器中存在拒绝服务可能性问题。
如果给 django.utils.text.Truncator
的 chars()
和 words()
方法传递了 html=True
参数,由于正则表达式中的灾难性回溯漏洞,它们在处理某些输入时非常慢。chars()
和 words()
方法用于实现 truncatechars_html
和 truncatewords_html
模板过滤器,因此这两个过滤器也存在漏洞。
正则表达式中的回溯问题已经修复。
漏洞修复
- 已修复一个回归问题,该问题导致切片的
QuerySet.distinct().order_by()
后跟count()
会导致崩溃(#29108)。 - 优先考虑了在泰国区域设置下没有
%f
的日期时间和时间输入格式,以修复管理员时间选择器小部件显示 “undefined” 的问题(#29109)。 - 已修复使用
QuerySet.order_by(Exists(...))
时的崩溃问题(#29118)。 - 使
Q.deconstruct()
在多个关键字参数的情况下具有确定性(#29125)。您可能需要修改现有迁移中的Q
,或者接受一个自动生成的迁移。 - 已修复一个回归问题,其中带有列表参数的
When()
表达式会导致崩溃(#29166)。 - 已修复在子查询中使用
Window()
表达式时的崩溃问题(#29172)。 - 已修复
AbstractBaseUser.normalize_username()
在username
参数不是字符串时的崩溃问题(#29176)。