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)。