Django 2.2.8发行说明

2019年12月2日

Django 2.2.8修复了一个安全问题和2.2.7中的几个错误,并添加了与python3.8的兼容性。

CVE-2019-19118:Django管理权限升级。

自从Django 2.1以来,Django模型管理员显示具有相关模型内联的父模型,其中用户对父模型只有查看权限,但对内联模型具有编辑权限,将显示父模型的只读视图,但内联的可编辑表单。

提交这些表单将不允许直接编辑父模型,但会触发父模型的 save() 方法,并导致调用保存前和保存后信号处理程序。这是一种权限提升,因为缺乏编辑模型权限的用户不应触发与保存相关的信号。

为了解决此问题,Django管理接口的权限处理代码已更改。现在,如果用户只有父模型的“查看”权限,则整个显示的表单将不可编辑,即使该用户具有编辑内联中包含的模型的权限。

这是一个向后不兼容的更改,Django安全团队知道,Django的一些用户依赖于允许以管理形式编辑内联的能力,而这种编辑是以其他方式只查看父模型的。

考虑到Django管理员的复杂性,特别是与权限相关的检查,Django安全团队认为这一更改是必要的:目前不可能在保持现有行为的同时,以避免在未来,这将与Django的兼容 默认安全 哲学。

目前,应用程序受此更改影响的开发人员应该用显式实现所需功能的自定义窗体和视图来替换只读父级中的内联。从长远来看,为管理界面添加一个文档化的、受支持的、经过适当测试的机制,可以在Django本身中实现。

错误修正

  • Fixed a data loss possibility in the admin changelist view when a custom formset's prefix contains regular expression special characters, e.g. '$' (#31031).

  • 修复了Django 2.2.1中的一个回归,该回归在使用多数据库设置迁移代理模型的权限时导致崩溃,如果 default 条目为空 (#31021

  • 修复了数据丢失的可能性 select_for_update() . 使用时 'self'of 争论与 multi-table inheritance ,父模型而不是查询集的模型被锁定 (#30953