Django 1.3.4 版本发行说明¶
2012 年 10 月 17 日
这是 Django 1.3 系列的第四个版本。
Host 头部中毒¶
Django 的某些部分(与最终用户编写的应用程序无关)使用完整的 URL,包括从 HTTP Host 头生成的域名。针对此类问题的一些攻击超出了 Django 的控制能力,需要正确配置 Web 服务器; Django 的文档已经包含了一段时间的说明,建议用户进行此类配置。
然而,Django 自身内置的 Host 标头解析仍然存在漏洞,最近有人向我们报告了这个问题。Django 1.3.3 和 Django 1.4.1 中的 Host 标头解析 -- 具体来说是 django.http.HttpRequest.get_host()
-- 在处理标头中的用户名/密码信息时出现了错误。因此,例如,在运行在 validsite.com
上时,Django 会接受以下 Host 标头:
Host: validsite.com:random@evilsite.com
利用这一点,攻击者可以使 Django 的部分功能(尤其是密码重置机制)为用户生成并显示任意 URL 。
为了解决这个问题,HttpRequest.get_host()
中的解析正在被修改;包含潜在危险内容(如用户名/密码对)的 Host 标头现在会引发异常 django.core.exceptions.SuspiciousOperation
。
关于这个问题的详细信息最初被发布在网上作为一份 安全公告。