Django 1.4.21发行说明

2015年7月8日

Django 1.4.21在1.4.20中修复了几个安全问题。

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

在先前版本的django中,会话后端随时随地在会话存储中创建了一个新的空记录。 request.session 已访问,请求cookie中提供了一个会话密钥,但该密钥还没有会话记录。这可以让攻击者简单地通过发送带有未知会话密钥的重复请求来轻松创建许多新会话记录,可能会填满会话存储或导致其他用户的会话记录被逐出。

内置会话后端现在只在实际修改会话时创建会话记录;不创建空会话记录。因此,只有当站点选择向匿名用户公开会话修改视图时,这种潜在的DoS才是可能的。

由于每个内置会话后端都是单独修复的(而不是核心会话框架中的修复),第三方会话后端的维护人员应该检查其后端是否存在相同的漏洞,如果存在,则进行更正。

由于验证器在输入中接受换行,因此头注入的可能性

Django的一些内置验证器 (EmailValidator 最严重的是)没有禁止换行符(由于 $ 而不是 \Z 在正则表达式中)。如果在HTTP响应或电子邮件头中使用换行符的值,则可能会遭受头注入攻击。Django本身并不脆弱,因为 HttpResponse 以及邮件发送实用程序 django.core.mail 分别禁止http和smtp头中的换行。虽然在Django中已经修复了验证程序,但是如果您以其他方式创建HTTP响应或电子邮件消息,最好确保这些方法也禁止换行。您可能还希望验证应用程序中的任何现有数据是否不包含意外的换行符。

validate_ipv4_address()validate_slug()URLValidator 及其在相应表单字段中的用法 GenericIPAddresseFieldIPAddressFieldSlugFieldURLField 也会受到影响。

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