2015年1月13日
Django1.4.18在1.4.17中修复了几个安全问题,在1.4.17版本中修复了对python 2.5的回归。
当HTTP头被放置到wsgi环境中时,它们将通过转换为大写、将所有破折号转换为下划线和前置字符进行规范化。 HTTP_
. 例如,头 X-Auth-User
将成为 HTTP_X_AUTH_USER
在WSGi环境中(因此也在Django的环境中) request.META
字典)。
不幸的是,这意味着wsgi环境无法区分包含短划线的头和包含下划线的头: X-Auth-User
和 X-Auth_User
都成为 HTTP_X_AUTH_USER
. 这意味着,如果以安全敏感的方式使用头(例如,从前端代理传递身份验证信息),即使代理小心地除去 X-Auth-User
,攻击者可以提供 X-Auth_User
头(带下划线)并绕过此保护。
为了防止此类攻击,nginx和apache 2.4+默认情况下会从传入请求中删除包含下划线的所有头文件。Django的内置开发服务器现在也在做同样的事情。Django的开发服务器不建议用于生产,但与普通生产服务器的行为匹配会减少部署期间行为更改的表面积。
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的最后一个版本。
12月 18, 2023