Django 1.8.3 发行说明 — Django 文档

来自菜鸟教程
Django/docs/3.0.x/releases/1.8.3
跳转至:导航、​搜索

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 本身并不容易受到攻击,因为 HttpResponsedjango.core.mail 中的邮件发送实用程序分别禁止在 HTTP 和 SMTP 标头中换行。 虽然验证器已在 Django 中修复,但如果您正在以其他方式创建 HTTP 响应或电子邮件消息,最好确保这些方法也禁止换行。 您可能还想验证应用程序中的任何现有数据不包含意外的换行符。

validate_ipv4_address()validate_slug()URLValidator 也受到影响,然而,从 Django 1.6 开始,GenericIPAddresseField、 X150X]、SlugFieldURLField 使用这些验证器的表单字段都会剥离输入,因此只有在表单字段之外使用这些验证器时,才会存在换行符输入数据的可能性。

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


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

URLValidator 包含一个正则表达式,该表达式在针对某些无效输入进行评估时极其缓慢。 此正则表达式已被简化和优化。


错误修正

  • 修复了 BaseRangeField.prepare_value() 以使用每个 base_fieldprepare_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`)。
  • 允许将 choicesDurationField 一起使用超过 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 类型(例如位图)的图像时崩溃的问题。
  • 修复了通过管理员删除具有 GenericRelationrelated_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`)。