Django 1.3.5 发行说明 — Django 文档

来自菜鸟教程
Django/docs/3.0.x/releases/1.3.5
跳转至:导航、​搜索

Django 1.3.5 发行说明

2012 年 12 月 10 日

Django 1.3.5 解决了 1.3 系列之前 Django 版本中存在的两个安全问题。

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

主机头中毒

几个早期的 Django 安全版本专注于中毒 HTTP Host 标头的问题,导致 Django 生成指向任意、潜在恶意域的 URL。

为了响应收到的进一步输入和上一版本之后持续问题的报告,我们正在采取额外措施来加强主机标头验证。 Django 的 Host 标头验证尝试支持更小但更常见的子集,而不是尝试在此处容纳 HTTP 支持的所有功能:

  • 主机名必须由字符 [A-Za-z0-9] 加上连字符 ('-') 或点 ('.') 组成。
  • 允许使用 IP 地址(IPv4 和 IPv6)。
  • 端口(如果指定)是数字。

现在将拒绝任何偏离,引发异常 django.core.exceptions.SuspiciousOperation


重定向中毒

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

从那以后,对代码的两次独立审计发现了进一步的潜在问题。 因此,类似于 Host-header 问题,我们正在采取措施提供更严格的验证以响应报告的问题(主要是第三方应用程序,但在一定程度上也在 Django 内部)。 这分为两部分:

1. 增加了一个新的效用函数django.utils.http.is_safe_url; 这个函数接受一个 URL 和一个主机名,并检查 URL 是相对的,还是绝对匹配提供的主机名。 此功能旨在在接受用户提供的重定向目标时使用,以确保此类重定向不会导致任意第三方站点。

2. 所有 Django 自己的内置视图——主要是在身份验证系统中——允许用户提供的重定向目标现在使用 is_safe_url 来验证提供的 URL。