Django 2.2.8 发行说明 — Django 文档
来自菜鸟教程
Django/docs/3.2.x/releases/2.2.8
Django 2.2.8 发行说明
2019 年 12 月 2 日
Django 2.2.8 修复了一个安全问题,2.2.7 中的几个错误,并增加了与 Python 3.8 的兼容性。
CVE-2019-19118:Django 管理员权限提升。
自 Django 2.1 起,Django 模型管理员显示具有相关模型内联的父模型,其中用户对父模型具有仅查看权限但对内联模型具有编辑权限,将显示父模型的只读视图但可编辑内联表格。
提交这些表单将不允许直接编辑父模型,但会触发父模型的 save()
方法,并导致调用保存前和保存后信号处理程序。 这是一种权限提升,因为没有模型编辑权限的用户不应能够触发与保存相关的信号。
为了解决这个问题,Django管理界面的权限处理代码已经改变。 现在,如果用户只有父模型的“查看”权限,则整个显示的表单将不可编辑,即使用户有权编辑内联中包含的模型。
这是一个向后不兼容的更改,并且 Django 安全团队意识到 Django 的一些用户依赖于允许在其他只能查看的父模型的管理表单中编辑内联的能力。
考虑到 Django 管理员的复杂性,尤其是与权限相关的检查,Django 安全团队认为这种改变是必要的:在逃避潜在的特权升级的同时,目前无法维持现有行为。一种可以避免将来再次发生类似问题的方法,并且默认情况下与 Django 的 安全 哲学兼容。
目前,其应用程序受此更改影响的开发人员应使用明确实现所需功能的自定义窗体和视图替换只读父级中内联的使用。 从长远来看,在 Django 本身中可能会为管理界面添加一个记录的、支持的和经过适当测试的机制,用于部分可编辑的多模型表单。
错误修正
- 修复了当自定义 表单集的前缀 包含正则表达式特殊字符时,管理更改列表视图中的数据丢失可能性,例如
'$'
(:ticket:`31031`)。 - 修复了 Django 2.2.1 中的回归,如果
default
条目为空 (:ticket:`31021`),则在迁移具有多个数据库设置的代理模型的权限时会导致崩溃。 - 修复了 select_for_update() 中数据丢失的可能性。 当在带有 多表继承 的
of
参数中使用'self'
时,父模型被锁定,而不是查询集的模型 (:ticket:`30953`[ X164X])。