已发布的安全版本

作者:James Bennett 发表于 2012年12月10日

今天,Django 团队发布了多个版本——Django 1.3.5、Django 1.4.3 和 Django 1.5 beta 2——作为我们安全流程的一部分。

我们鼓励所有用户立即升级 Django。

请注意,此安全版本与之前的版本略有不同。此处解决的两个问题都已在之前的 Django 安全更新中得到处理。在一个案例中,我们收到了持续的问题报告,在另一个案例中,我们选择采取进一步措施加强 Django 的代码,以应对多个来源独立发现的潜在问题。

主机头注入

之前的几个 Django 安全版本都关注 HTTP Host 头注入问题,这会导致 Django 生成指向任意(可能恶意)域的 URL。

为了响应收到的更多反馈以及先前版本发布后持续出现问题的报告,我们正在采取额外措施以加强 Host 头验证。与其尝试在这里适应 HTTP 支持的所有功能,不如让 Django 的 Host 头验证尝试支持更小但更常见的子集。

任何偏离此规则的行为现在都将被拒绝,并引发 django.core.exceptions.SuspiciousOperation 异常。

重定向注入

同样是对之前问题的跟进:今年 7 月,我们对 Django 的 HTTP 重定向类进行了更改,对要重定向到的 URL 方案进行了额外验证(因为,在 Django 自身的提供的应用程序和许多第三方应用程序中,接受用户提供的重定向目标是一种常见的模式)。

从那时起,对代码进行了两次独立审计,发现了更多潜在问题。因此,与 Host 头问题类似,我们正在采取措施,以应对报告的问题(主要是在第三方应用程序中,但在一定程度上也在 Django 本身中)提供更严格的验证。这分为两个部分。

  1. 添加了一个新的实用程序函数 django.utils.http.is_safe_url;此函数接受一个 URL 和一个主机名,并检查该 URL 是否为相对 URL,或者如果为绝对 URL,则与提供的主机名匹配。此函数旨在在接受用户提供的重定向目标时使用,以确保此类重定向不会导致任意第三方站点。
  2. Django 所有内置视图(主要在身份验证系统中)现在都使用 is_safe_url 来验证用户提供的重定向目标。

受影响的版本

导致此安全版本发布的问题存在于以下版本的 Django 中:

解决方案

已将补丁应用于 Django 的主开发分支和 1.5、1.4 和 1.3 发布分支,这些补丁解决了上述问题。补丁可以直接从以下 changeset 获取:

已发布以下新版本:

由于 Django 的开发分支目前处于预发布版状态,而 1.5 分支处于 beta 状态,强烈建议用户不要在生产环境中运行它们;但是,如果您目前正在这样做,我们强烈建议您立即升级到相应分支的最新 HEAD,其中包含上述补丁。

致谢

对 Host 头问题的后续处理来自之前问题的报告者 James Kettle。重定向代码的潜在问题是由 Trac 中的用户名为“Gunnar”的用户和提交者 Florian Apolloner 独立发现的。

关于安全报告的常规说明

与以往一样,我们要求通过私人电子邮件 security@djangoproject.com 报告潜在的安全问题,而不是通过 Django 的 Trac 实例或 django-developers 列表。请参阅 我们的安全策略 以了解更多信息。

返回顶部