Django 1.8.3发行说明

2015年7月8日

Django1.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开始, GenericIPAddresseFieldIPAddressFieldSlugFieldURLField 使用这些验证器的表单域都会删除输入,因此只有在表单域之外使用这些验证器时,才有可能输入数据。

未记录的,内部未使用的 validate_integer() 函数现在更严格了,因为它使用正则表达式进行验证,而不是简单地使用 int() 并检查是否引发异常。

URL验证中的拒绝服务可能性

URLValidator 包括一个正则表达式,它对某些无效输入的计算速度非常慢。此正则表达式已被简化和优化。

错误修正

  • 固定的 BaseRangeField.prepare_value() 使用每个 base_fieldprepare_value() 方法 (#24841

  • 修复了在 makemigrations 如果迁移模块丢失 __init__.py 或者是一个文件 (#24848

  • 固定的 QuerySet.exists() 在注释后返回不正确的结果 Count() (#24835

  • 修正的 HStoreField.has_changed() (#24844

  • 将优化恢复到CSRF模板上下文处理器,导致回归 (#24836

  • 修正了导致模板上下文处理器覆盖 RequestContext 在它被创建之后 (#24847

  • 防止了 null/not null MySQL数据库字段重命名时的列属性 (#24817

  • 修正了在 ModelAdmin.list_display (#24851

  • 将字段重命名为时SQL的固定引用 AutoField 在PostgreSQL (#24892

  • 修正了将字段从 primary_key=Trueunique=True (#24893

  • 使用时固定查询集酸洗 prefetch_related() 删除对象后 (#24831

  • 允许使用 choices 超过1天 DurationField (#24897

  • 修正了从两个相互依赖的应用程序加载压缩迁移时的崩溃,其中依赖的应用程序替换的迁移部分应用。 (#24895

  • 固定记录挤压(替换)迁移的应用状态 (#24628

  • 使用时修复了queryset注释 Case 表达式 exclude() (#24833

  • 修正了多重加入提升 Case 表达。用多个注释查询 Case 表达式可能会意外筛选出结果 (#24924

  • 固定在子查询中使用转换 (#24744

  • 固定的 SimpleTestCase.assertRaisesMessage() 在python 2.7.10上 (#24903

  • 提供了更好的向后兼容性 verbosity 论点 optparse 通过将其转换为整数来管理命令 (#24769

  • 固定的 prefetch_related() 对于使用UUID主键的模型,在PostgreSQL以外的数据库上 (#24912

  • 固定去除 unique_together MySQL的约束 (#24972

  • 修正了当上传带有枕头检测不到的mime类型的图像时崩溃的问题,例如位图 forms.ImageField (#24948

  • 修正了通过具有 GenericRelation 用一个 related_query_name (#24940

  • 为重新分配的非ASCII值 ForeignKey.related_name 在python 3上通过修复误报系统检查 (#25016

  • 修复了使用具有 UUIDField 主键和具有 AutoField 主键 (#24958

  • 修正了在 unordered_list 特定输入上的模板过滤器 (#25031

  • 修正了回归 URLValidator 使Punycode TLD失效 (#25059

  • 改进 pyinotify runserver 轮询 (#23882