Django 1.7.9 发行说明 — Django 文档

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

Django 1.7.9 发行说明

2015 年 7 月 8 日

Django 1.7.9 修复了 1.7.8 中的几个安全问题和错误。

通过填充会话存储来拒绝服务的可能性

在以前的 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() 转换值并检查是否引发异常。


错误修正

  • 防止在 MySQL 数据库字段重命名期间 null/not null 列属性丢失 (:ticket:`24817`)。
  • 修复了 Python 2.7.10 上的 SimpleTestCase.assertRaisesMessage() (:ticket:`24903`)。