发布安全更新

作者:James Bennett 发布于 2009年7月28日

根据我们的安全策略,Django 项目今天发布了一系列版本来修复报告给我们的漏洞。本公告包含漏洞描述、修复更改描述以及每个受支持 Django 版本的补丁链接。

本文还涵盖了一个无关问题,虽然与安全相关并且导致了未来 Django 版本的更改,但本身并不被视为 Django 的漏洞。

漏洞描述

Django 包含一个轻量级的基于 WSGI 的 Web 服务器,用于学习 Django 以及在开发早期阶段测试新应用。为了方便起见,此 Web 服务器会自动映射某些与 Django 管理应用使用的静态媒体文件相对应的 URL。

映射这些 URL 的处理程序没有正确检查请求的 URL 以验证它是否对应于 Django 使用的静态媒体文件。因此,精心制作的 URL 可能会导致开发服务器提供任何它有读取权限的文件。

默认情况下,开发服务器不监听本地 IPv4 环回以外的接口,并且 Django 的文档已经并且将继续对在其他情况下使用开发服务器(例如,监听公共或网络可访问的接口)发出严厉警告,并声明开发服务器不被认为足够安全或高效以供此类用途。

受影响版本

  • Django 开发主干
  • Django 1.0
  • Django 0.96

解决方案

开发服务器的管理媒体处理程序已打补丁,以验证请求的 URL 是否对应于应提供的静态媒体文件,并在 URL 不对应于此类文件时正确发出 HTTP 404(“文件未找到”)响应。

补丁已在以下变更集中应用

以下版本正在立即发布

强烈建议所有使用受影响 Django 版本的用户进行升级。

Django 1.1 的最终版本将在这些版本发布后的几个小时内发布,其中将包含来自开发主干的上述补丁。

次要问题

在某些类型的托管环境中,Django 的常见部署策略是将处理 Django 的服务器置于其他 Web 服务器之后,然后该服务器充当 HTTP 代理。在这种情况下,REMOTE_ADDR环境变量通常是代理的 IP 地址。为了方便起见,Django 包含一个可选的中介类 --django.middleware.http.SetRemoteAddrFromForwardedFor-- 它会更新REMOTE_ADDR的值,X-Forwarded-For标头通常由某些代理配置设置。

已经证明,此机制无法保证足够可靠以供通用使用,并且(尽管文档与此相反)将其包含在 Django 中可能会导致应用程序开发人员假设REMOTE_ADDR的值是“安全”的或以某种方式可靠作为身份验证的来源。

虽然不是直接的安全问题(因为依赖REMOTE_ADDR或类似的值被广泛认为是不佳做法),但 Django 团队已决定弃用并开始从 Django 1.1 版本中移除此中介类。

此中介类将在 1.0 和 0.96 发布系列中保持不变,但在 1.1 发布系列中,它将被一个除了引发弃用错误之外不执行任何操作的类替换。预计此占位符警告类将在 Django 1.2 发布系列中移除。

其他

请注意,Django 1.1 的发布将触发 Django 0.96 发布系列的终止;因此,Django 0.96.4 将是该系列中的最后一个正式版本,并且它将不再直接从 Django 开发团队获得错误修复或安全支持。

返回顶部