Django 1.3.5 版本发行说明¶
2012 年 12 月 10 日
Django 1.3.5 解决了 1.3 系列中之前 Django 版本存在的两个安全问题。
请注意,这个安全发布与之前的发布略有不同。这里解决的两个问题都已在之前的 Django 安全更新中得到处理。在一个案例中,我们收到了持续的问题报告,另一个案例中,我们选择采取进一步措施来加强 Django 的代码,以应对来自多个来源的潜在问题的独立发现。
Host 头部中毒¶
早期的几个 Django 安全发布主要关注 HTTP Host 头部被污染的问题,这会导致 Django 生成指向任意、可能恶意的域名的 URL 。
为了回应收到的进一步意见以及在之前发布后持续出现的问题,我们正在采取额外措施来加强 Host 头部验证。与其试图适应 HTTP 支持的所有功能,Django 的 Host 头部验证试图支持一个更小但更常见的子集:
主机名必须由字符
[A-Za-z0-9]
加上连字符('-')或点号('.')组成。允许使用 IP 地址 - 包括 IPv4 和 IPv6 。
如果指定了端口,必须为数字。
现在,任何与此不符的都将被拒绝,并引发异常 django.core.exceptions.SuspiciousOperation
。
重定向投毒¶
同样是跟进之前的问题:今年 7 月,我们对 Django 的 HTTP 重定向类进行了修改,对要重定向到的 URL 的方案进行了额外验证(因为在 Django 自带的应用程序和许多第三方应用程序中,接受用户提供的重定向目标是一种常见的模式)。
从那时起,对代码进行的两次独立审计发现了更多潜在问题。因此,与 Host-header 问题类似,我们正在采取措施提供更严格的验证,以应对报告的问题(主要是与第三方应用程序相关,但在一定程度上也涉及 Django 本身)。这分为两部分:
1. A new utility function, django.utils.http.is_safe_url
, is added; this
function takes a URL and a hostname, and checks that the URL is either
relative, or if absolute matches the supplied hostname. This function is
intended for use whenever user-supplied redirect targets are accepted, to
ensure that such redirects cannot lead to arbitrary third-party sites.
2. All of Django's own built-in views -- primarily in the authentication system
-- which allow user-supplied redirect targets now use is_safe_url
to
validate the supplied URL.