2019年12月2日
Django 2.1.15修复了2.1.14中的安全问题和数据丢失错误。
自从Django 2.1以来,Django模型管理员显示具有相关模型内联的父模型,其中用户对父模型只有查看权限,但对内联模型具有编辑权限,将显示父模型的只读视图,但内联的可编辑表单。
提交这些表单将不允许直接编辑父模型,但会触发父模型的 save()
方法,并导致调用保存前和保存后信号处理程序。这是一种权限提升,因为缺乏编辑模型权限的用户不应触发与保存相关的信号。
为了解决此问题,Django管理接口的权限处理代码已更改。现在,如果用户只有父模型的“查看”权限,则整个显示的表单将不可编辑,即使该用户具有编辑内联中包含的模型的权限。
这是一个向后不兼容的更改,Django安全团队知道,Django的一些用户依赖于允许以管理形式编辑内联的能力,而这种编辑是以其他方式只查看父模型的。
考虑到Django管理员的复杂性,特别是与权限相关的检查,Django安全团队认为这一更改是必要的:目前不可能在保持现有行为的同时,以避免在未来,这将与Django的兼容 默认安全 哲学。
目前,应用程序受此更改影响的开发人员应该用显式实现所需功能的自定义窗体和视图来替换只读父级中的内联。从长远来看,为管理界面添加一个文档化的、受支持的、经过适当测试的机制,可以在Django本身中实现。
修复了数据丢失的可能性 select_for_update()
. 使用时 'self'
在 of
争论与 multi-table inheritance ,父模型而不是查询集的模型被锁定 (#30953 )
12月 18, 2023