Django 1.8.3 发行说明 — Django 文档
Django 1.8.3 发行说明
2015 年 7 月 8 日
Django 1.8.3 修复了 1.8.2 中的几个安全问题和错误。
此外,django.utils.deprecation.RemovedInDjango20Warning
更名为 RemovedInDjango110Warning
,因为版本路线图已修订为 1.9、1.10、1.11 (LTS)、2.0(放弃对 Python 2 的支持)。 为了向后兼容,RemovedInDjango20Warning
仍然是一个可导入的别名。
通过填充会话存储来拒绝服务的可能性
在以前的 Django 版本中,会话后端会在任何时候访问 request.session
时在会话存储中创建一个新的空记录,并且请求 cookie 中提供了一个没有会话记录的会话密钥。 这可能允许攻击者通过发送带有未知会话密钥的重复请求轻松创建许多新会话记录,从而可能填满会话存储或导致其他用户的会话记录被逐出。
内置会话后端现在仅在会话被实际修改时创建会话记录; 不会创建空会话记录。 因此,这种潜在的 DoS 现在只有在站点选择向匿名用户公开会话修改视图时才有可能。
由于每个内置会话后端都是单独修复的(而不是在核心会话框架中进行修复),因此第三方会话后端的维护人员应检查其后端中是否存在相同的漏洞,如果存在则进行更正。
标头注入的可能性,因为验证器接受输入中的换行符
一些 Django 的内置验证器(EmailValidator,最严重的)没有禁止换行符(由于在正则表达式中使用 $
而不是 \Z
) . 如果您在 HTTP 响应或电子邮件标头中使用带换行符的值,您可能会遭受标头注入攻击。 Django 本身并不容易受到攻击,因为 HttpResponse 和 django.core.mail 中的邮件发送实用程序分别禁止在 HTTP 和 SMTP 标头中换行。 虽然验证器已在 Django 中修复,但如果您正在以其他方式创建 HTTP 响应或电子邮件消息,最好确保这些方法也禁止换行。 您可能还想验证应用程序中的任何现有数据不包含意外的换行符。
validate_ipv4_address()、validate_slug() 和 URLValidator 也受到影响,然而,从 Django 1.6 开始,GenericIPAddresseField
、 X150X]、SlugField
和 URLField
使用这些验证器的表单字段都会剥离输入,因此只有在表单字段之外使用这些验证器时,才会存在换行符输入数据的可能性。
未记录的、内部未使用的 validate_integer()
函数现在更加严格,因为它使用正则表达式进行验证,而不是简单地使用 int()
转换值并检查是否引发异常。
错误修正
- 修复了
BaseRangeField.prepare_value()
以使用每个base_field
的prepare_value()
方法(:ticket:`24841`)。 - 修复了在 :djadmin:`makemigrations` 期间如果迁移模块丢失
__init__.py
或文件(:ticket:`24848`)的崩溃。 - 修复了
QuerySet.exists()
在使用Count()
注释后返回错误结果的问题 (:ticket:`24835`)。 - 更正
HStoreField.has_changed()
(:ticket:`24844`)。 - 恢复了导致回归的 CSRF 模板上下文处理器的优化 (:ticket:`24836`)。
- 修复了导致模板上下文处理器在创建后覆盖在
RequestContext
上设置的变量的回归(:ticket:`24847`)。 - 防止在 MySQL 数据库字段重命名期间
null
/not null
列属性丢失 (:ticket:`24817`)。 - 修复了在
ModelAdmin.list_display
(:ticket:`24851`) 中使用反向一对一关系时崩溃的问题。 - 修复了在 PostgreSQL (:ticket:`24892`) 中将字段重命名为
AutoField
时引用 SQL 的问题。 - 修复了将字段从
primary_key=True
更改为unique=True
(:ticket:`24893`) 时缺少唯一约束的问题。 - 修复了删除对象后使用
prefetch_related()
时的查询集酸洗 (:ticket:`24831`)。 - 允许将
choices
与DurationField
一起使用超过 1 天(:ticket:`24897`)。 - 修复了从两个具有依赖关系的应用程序加载压缩迁移时崩溃的问题,其中部分应用依赖应用程序的替换迁移 (:ticket:`24895`)。
- 修复了压缩(替换)迁移的应用状态记录 (:ticket:`24628`)。
- 修复了将
Case
表达式与exclude()
(:ticket:`24833`) 一起使用时的查询集注释。 - 更正了多个
Case
表达式的连接提升。 使用多个Case
表达式注释查询可能会意外过滤掉结果 (:ticket:`24924`)。 - 修复了子查询中转换的使用(:ticket:`24744`)。
- 修复了 Python 2.7.10 上的
SimpleTestCase.assertRaisesMessage()
(:ticket:`24903`)。 - 通过将
optparse
管理命令中的verbosity
参数提供更好的向后兼容性。 - 对于使用 UUID 主键的模型,在 PostgreSQL 以外的数据库上修复了
prefetch_related()
(:ticket:`24912`)。 - 修复了删除 MySQL 上的
unique_together
约束 (:ticket:`24972`)。 - 修复了在
forms.ImageField
(:ticket:`24948`) 中上传具有 Pillow 未检测到的 MIME 类型(例如位图)的图像时崩溃的问题。 - 修复了通过管理员删除具有
GenericRelation
和related_query_name
的模型时的回归(:ticket:`24940`)。 - 通过修复误报系统检查 (:ticket:`25016`),在 Python 3 上重新允许
ForeignKey.related_name
的非 ASCII 值。 - 修复了使用具有
UUIDField
主键的父对象和具有AutoField
主键的子对象 (:ticket:`24958`) 的内联表单。 - 修复了
unordered_list
模板过滤器中某些输入 (:ticket:`25031`) 的回归。 - 修复了
URLValidator
中使 Punycode TLD 无效的回归 (:ticket:`25059`)。 - 改进了 pyinotify
runserver
轮询(:ticket:`23882`)。