已发布的安全更新
今天,Django 团队发布了多个版本——Django 1.3.4 和 Django 1.4.2——以解决报告给我们的安全问题。
鼓励所有用户立即升级 Django。
Host
头部注入
Django 的某些部分(独立于最终用户编写的应用程序)使用完整的 URL,包括从 HTTP Host
头部生成的域名。某些针对此的攻击超出了 Django 的控制能力,需要正确配置 Web 服务器;Django 的文档已有一段时间包含关于此类配置的建议说明。
然而,Django 自身的内置 Host
头部解析仍然存在漏洞,最近已向我们报告。Django 1.3 和 Django 1.4 中的 Host
头部解析(特别是 django.http.HttpRequest.get_host()
)错误地处理了头部中的用户名/密码信息。因此,例如,以下 Host
头部将在“validsite.com”上运行的 Django 中被接受
Host: validsite.com:random@evilsite.com
利用这一点,攻击者可以导致 Django 的某些部分(特别是密码重置机制)为用户生成和显示任意 URL。
为了解决这个问题,HttpRequest.get_host()
中的解析正在修改;包含潜在危险内容(例如用户名/密码对)的 Host
头部现在会引发 django.core.exceptions.SuspiciousOperation
异常。
HttpOnly
cookie 选项的文档
从 Django 1.4 开始,会话 cookie 始终带有 HttpOnly
标志,通过拒绝客户端脚本访问会话 cookie 来提供针对跨站点脚本攻击的额外保护。
虽然这并非 Django 中的直接安全问题,但据报道,Django 1.4 文档错误地描述了此更改,声称这现在是 HttpResponse.set_cookie()
方法设置的所有 cookie 的默认值。
Django 文档已更新以反映这仅适用于会话 cookie。鼓励 Django 用户检查其对 set_cookie()
的使用,以确保已适当地设置或取消设置 HttpOnly
标志。
受影响的版本
上面描述的 Host
头部问题存在于以下版本的 Django 中
- Django 1.3 发布系列(所有版本)
- Django 1.4 发布系列(所有版本)
- Django 主开发分支(即将成为 Django 1.5)
HttpOnly
cookie 文档问题存在于以下版本的 Django 中
- Django 1.4 发布系列(所有版本)
- Django 主开发分支
解决方案
已将补丁应用于 Django 的开发主分支以及 1.4 和 1.3 发布分支,这些补丁解决了上述问题。可以从以下 changeset 直接获取这些补丁
- 开发主分支:提交(针对
Host
头部问题)和 提交(针对HttpOnly
cookie 文档问题)。 - Django 1.4:提交(针对
Host
头部问题)和 提交(针对HttpOnly
cookie 文档问题)。 - Django 1.3:提交(针对
Host
头部问题)。
已发布以下新版本
由于 Django 的开发分支目前处于预 alpha 状态,强烈建议用户不要从中运行生产部署;但是,如果您目前正在这样做,我们强烈建议您立即升级到最新的 HEAD,其中包含上述补丁。
致谢
Host
头部问题由 James Kettle 报告。HttpOnly
cookie 文档问题由 Preston Holmes 报告,他现在是 Django 的提交者。
关于安全报告的常规说明
与往常一样,我们要求通过私人电子邮件 security@djangoproject.com 报告潜在的安全问题,而不是通过 Django 的 Trac 实例或 django-developers 列表报告。请参阅我们的安全策略以获取更多信息。
返回顶部