Django 3.0.1 版本发行说明

2019 年 12 月 18 日

Django 3.0.1 修复了 3.0 版本中的一个安全问题和几个错误。

CVE-2019-19844 :通过密码重置表单可能导致账户劫持

通过提交一个精心设计的电子邮件地址,利用 Unicode 字符使其与现有用户电子邮件在进行比较时转换为小写后相等,攻击者可以为匹配的帐户发送密码重置令牌。

为了避免这个漏洞,密码重置请求现在使用更严格、推荐的算法来比较提交的电子邮件,用于不区分大小写比较两个标识符的算法来自 Unicode Technical Report 36, section 2.11.2(B)(2)。如果匹配成功,包含重置令牌的电子邮件将发送到记录的电子邮件地址,而不是提交的地址。

漏洞修复

  • 通过在环境变量 DJANGO_ALLOW_ASYNC_UNSAFE 中添加选项,恢复了在 Django 3.0 中修复的一个回归问题,该问题允许在 Jupyter 和其他强制启用异步上下文的环境中使用 Django,以禁用 异步安全 机制。 (#31056)。
  • 在 Django 3.0 中修复了一个回归问题,其中 RegexPattern,被 re_path() 使用,返回了要传递给视图的位置参数,当所有可选的命名分组都缺失时 (#31061)。
  • 在 Django 3.0 中修复了一个回归问题,现在可以重新允许在查询集过滤器之外的条件中使用 Window 表达式,例如在 When 条件中 (#31060)。
  • 修复了 SplitArrayField 中的数据丢失可能性。当与 ArrayField(BooleanField()) 一起使用时,第一个 True 值后的所有值都被标记为已选中,而不是保留传递的值 (#31073)。