Django 3.1.1 版本发行说明

2020 年 9 月 1 日

Django 3.1.1 修复了 3.1 中的两个安全问题和几个 bug。

CVE-2020-24583:Python 3.7+ 上的中间层目录的权限不正确。

在 Python 3.7+ 上,当使用 collectstatic 管理命令时, FILE_UPLOAD_DIRECTORY_PERMISSIONS 模式不能应用于上传文件过程中创建的中间级目录和中间级收集的静态目录。

你应该检查并手动修正现有中间级目录的权限。

CVE-2020-24584:在 Python 3.7+ 上,文件系统缓存的中间级目录的权限升级。

在 Python 3.7+ 上,文件系统缓存的中间级目录有系统的标准 umask,而不是 0o077 (无组或其他权限)。

漏洞修复

  • 修正了东亚语系管理的导航侧边栏中翻译动作标签的包装问题(#31853)。
  • 修正了管理的导航侧边栏中长模型名称的包装(#31854)。
  • 修正了同一项目的多个实例升级到 Django 3.1 时的会话数据编码问题(#31864)。
  • 调整了管理的导航侧栏模板,减少渲染时的调试日志(#31865)。
  • 修正了 select_for_update() 中数据丢失的可能性。当在 of 参数中使用指向代理模型的相关字段时,对应的模型没有被锁定(#31866)。
  • 修正了 Django 2.0 中的缺陷,当复制带有缓存字段值(#31863)的模型实例时,可能会丢失数据。
  • 修正了 Django 3.1 中一个在解码无效会话数据时导致崩溃的缺陷(#31895)。
  • 纠正了 Django 3.1 中的一个弃用问题,该问题在 TemplateView.get_context_data() 中传递废弃的关键字参数到查询集时导致崩溃(#31877)。
  • 在异步上下文中(#31905),强制执行 MiddlewareMixin.process_request()process_response() 钩子的线程敏感性。
  • 修正了 JSONField 与 MariaDB、MySQL、Oracle 和 SQLite 的键转换时的 __in 查找(#31936)。
  • 修正了 Django 3.1 中的一个缺陷,当用户对 Django 安装路径中的所有中间目录没有权限时, startproject 命令生成的 CommonPasswordValidatorsettings.py 会导致权限错误(#31912)。
  • 修正了在各种内置中间件中检测到异步 get_response 可调用对象的问题(#31928)。
  • 修正了 PostgreSQL 上的 QuerySet.order_by() 在使用自定义的 JSONField#31956) 对 JSONField 进行排序和分组时发生崩溃的问题。因此,使用原始 SQL 获取一个 JSONField 现在返回一个字符串而不是预加载的数据。在这种情况下,你需要显式调用 json.load()
  • 修正了 MySQL 上的 QuerySet.delete() 崩溃问题,这是在 MariaDB 10.3.2+ 上的 Django 3.1 中出现的性能倒退,当对一个聚合函数(#31965)进行过滤时。
  • 修正了 django.contrib.admin.EmptyFieldListFilter 在反向关系上使用时崩溃的问题(#31952)。
  • 防止在启用导航侧栏时,内容溢出到管理的变更列表视图中(#31901)。