Django 1.3.5发行说明

2012年12月10日

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

请注意,此安全版本与以前的版本略有不同。在对Django进行安全更新之前,已经解决了这两个问题。在一种情况下,我们已经收到了持续不断的问题报告,而在另一种情况下,我们选择采取进一步的步骤来加强Django的代码,以响应来自多个来源的潜在问题的独立发现。

主机头中毒

早先的几个Django安全性发布集中于HTTP主机头中毒的问题,导致Django生成指向任意、潜在恶意域的URL。

为了响应先前版本之后收到的进一步输入和持续问题的报告,我们正在采取其他步骤来加强主机头验证。Django的主机头验证尝试支持更小但更常见的子集,而不是尝试适应HTTP在这里支持的所有功能:

  • 主机名必须由字符组成 [A-Za-z0-9] 加上连字符(“-”)或点(“.”)。

  • 允许IP地址(包括IPv4和IPv6)。

  • 端口(如果指定)为数字。

任何偏离这一点的行为现在都将被拒绝,从而引发了例外。 django.core.exceptions.SuspiciousOperation .

重定向中毒

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

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

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

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