Django 2.0.3 版本发行说明

2018 年 3 月 6 日

Django 2.0.3 修复了 2.0.2 版本中的两个安全问题和一些错误。此外,还整合了来自 Transifex 的最新字符串翻译。

CVE-2018-7536: urlizeurlizetrunc 模板过滤器中的拒绝服务可能性问题

django.utils.html.urlize() 函数在处理某些输入时非常慢,这是由于两个正则表达式中的灾难性回溯漏洞引起的。urlize() 函数用于实现 urlizeurlizetrunc 模板过滤器,因此这两个过滤器也存在漏洞。

问题正则表达式被替换为具有相似行为的解析逻辑。

CVE-2018-7537: truncatechars_htmltruncatewords_html 模板过滤器中存在拒绝服务可能性问题。

如果给 django.utils.text.Truncatorchars()words() 方法传递了 html=True 参数,由于正则表达式中的灾难性回溯漏洞,它们在处理某些输入时非常慢。chars()words() 方法用于实现 truncatechars_htmltruncatewords_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)。