Django 1.9.3 发行说明 — Django 文档
Django 1.9.3 发行说明
2016 年 3 月 1 日
Django 1.9.3 修复了 1.9.2 中的两个安全问题和几个错误。
CVE-2016-2512:通过用户提供的包含基本身份验证的重定向 URL 进行恶意重定向和可能的 XSS 攻击
Django 在某些情况下依赖于用户输入(例如 django.contrib.auth.views.login()
和 i18n) 将用户重定向到“成功”的 URL。 这些重定向(即 django.utils.http.is_safe_url()
)的安全检查认为某些具有基本身份验证凭据的 URL 不应该是“安全的”。
例如,如果请求的主机是 http://mysite.example.com
,则像 http://mysite.example.com\@attacker.com
这样的 URL 将被认为是安全的,但重定向到此 URL 会将用户发送到 attacker.com
。
此外,如果开发人员依赖 is_safe_url()
提供安全的重定向目标并将此类 URL 放入链接中,他们可能会遭受 XSS 攻击。
CVE-2016-2513:通过密码散列器工作因子升级的时间差异进行用户枚举
在 Django 1.6 之后的每个主要版本中,PBKDF2PasswordHasher
及其子类的默认迭代次数都增加了。 随着硬件速度的提高,这提高了密码的安全性,但是,它也会在使用旧迭代次数编码的密码的用户登录请求与不存在的用户(运行自 Django 1.6 以来默认哈希器的默认迭代次数)。
这仅影响自迭代增加以来尚未登录的用户。 用户在迭代增加后第一次登录时,他们的密码会随着新的迭代更新,不再有时间差异。
新的 BasePasswordHasher.harden_runtime()
方法允许 hashers 弥合工作因素之间的运行时差距(例如 迭代)在现有的编码密码和哈希器的默认工作因子中提供。 该方法针对 PBKDF2PasswordHasher
和 BCryptPasswordHasher
实现。 自 Django 1.4 以来,后一个 hasher 的轮数没有改变,但一些项目可能会对其进行子类化并根据需要增加工作系数。
对于未实现 harden_runtime()
方法的任何 第三方密码哈希器,都会发出警告。
如果您的数据库中有不同的密码哈希值(例如,自 Django 1.4 中默认哈希器切换到 PBKDF2 以来尚未登录的用户的 SHA1 哈希值),则这些用户的登录请求的时间差异可能更大,这fix 并不能弥补这种差异(或更改哈希时的任何差异)。 您可以 升级这些哈希值 以防止这种情况下的定时攻击。
错误修正
- 如果未定义
ROOT_URLCONF
设置(:ticket:`26155`),则跳过 URL 检查(1.9 中的新功能)。 - 修复了 PostgreSQL 上无法使用
TIME_ZONE=None
和USE_TZ=False
(:ticket:`26177`) 的崩溃。 - 添加了对隐藏关系的查询名称冲突的系统检查 (:ticket:`26162`)。
- 修复了
ForeignObject.get_extra_descriptor_filter()
返回Q
对象 (:ticket:`26153`) 的回归问题。 - 修复了使用
__in=qs
查找ForeignKey
与to_field
集的回归 (:ticket:`26196`)。 - 使
forms.FileField
和utils.translation.lazy_number()
可腌制(:ticket:`26212`)。 - 修复了 RangeField 和 ArrayField 序列化与
None
值(:ticket:`26215`)。 - 修复了在
RawQuery
(:ticket:`26219`) 中按Decimal
过滤时崩溃的问题。 - 重新允许
URLValidator
检查的 URL 的顶级域名中的破折号以修复 Django 1.8 中的回归(:ticket:`26204`)。 - 修复了
SimpleTemplateResponse
中一些在 Django 1.9 中退化的崩溃弃用垫片 (:ticket:`26253`)。 - 修复了
BoundField
以重新分配子部件切片 (:ticket:`26267`)。 - 将登录模板中管理员的“权限被拒绝”消息更改为使用
get_username
而不是username
以支持自定义用户模型 (:ticket:`26231`)。 - 修复了将不存在的模板名称传递给缓存模板加载器的
load_template()
方法时崩溃的问题 (:ticket:`26280`)。 - 阻止
ContentTypeManager
实例共享它们的缓存 (:ticket:`26286`)。 - 恢复了 Django 1.9.2 (:ticket:`25858`) 中的一个更改,该更改阻止了抽象模型上定义的相对惰性关系根据其具体模型的
app_label
(:票:`26186`)。