Django 1.4.18发行说明

2015年1月13日

Django1.4.18在1.4.17中修复了几个安全问题,在1.4.17版本中修复了对python 2.5的回归。

通过下划线/短划线合并的wsgi头欺骗

当HTTP头被放置到wsgi环境中时,它们将通过转换为大写、将所有破折号转换为下划线和前置字符进行规范化。 HTTP_ . 例如,头 X-Auth-User 将成为 HTTP_X_AUTH_USER 在WSGi环境中(因此也在Django的环境中) request.META 字典)。

不幸的是,这意味着wsgi环境无法区分包含短划线的头和包含下划线的头: X-Auth-UserX-Auth_User 都成为 HTTP_X_AUTH_USER . 这意味着,如果以安全敏感的方式使用头(例如,从前端代理传递身份验证信息),即使代理小心地除去 X-Auth-User ,攻击者可以提供 X-Auth_User 头(带下划线)并绕过此保护。

为了防止此类攻击,nginx和apache 2.4+默认情况下会从传入请求中删除包含下划线的所有头文件。Django的内置开发服务器现在也在做同样的事情。Django的开发服务器不建议用于生产,但与普通生产服务器的行为匹配会减少部署期间行为更改的表面积。

通过用户提供的重定向URL减轻了可能的XSS攻击

Django在某些情况下依赖于用户输入(例如 django.contrib.auth.views.login() and i18n) to redirect the user to an "on success" URL. The security checks for these redirects (namely django.utils.http.is_safe_url()) didn't strip leading whitespace on the tested URL and as such considered URLs like \njavascript:... 安全。如果开发商依赖 is_safe_url() 为了提供安全的重定向目标并将这样的URL放到链接中,他们可能会遭受XSS攻击。此错误当前不影响Django,因为我们只将此URL放入 Location 响应头和浏览器似乎忽略了那里的javascript。

拒绝服务攻击 django.views.static.serve

在旧版本的django中, django.views.static.serve() 查看一次读取它服务的一行文件。因此,没有换行符的大文件将导致内存使用量等于该文件的大小。攻击者可以利用此漏洞,同时请求许多大型文件,从而发起拒绝服务攻击。此视图现在以块的形式读取文件,以防止大量的内存使用。

但是,请注意,此视图始终带有一个警告,即它不是为生产使用而硬化的,只能用作开发辅助工具。如果您不这样做的话,现在可能是审核项目并在生产中使用真正的前端Web服务器提供文件服务的好时机。

错误修正

  • 为了保持与Django的6版本python 2.5的兼容性, django.utils.six ,已降级为1.8.0,这是支持python 2.5的最后一个版本。