# Django 5.2.8 documentation

# 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.