Django 1.4.2 release notes

2012年10月17日

这是Django 1.4系列中的第二个安全版本。

Host header poisoning

Django的一些部分 - 独立于最终用户编写的应用程序 - 使用从HTTP主机头生成的完整URL,包括域名。对此的一些攻击超出了Django的控制能力,需要正确配置Web服务器; Django的文档有一段时间包含建议用户这样配置的注释。

Django自己内置的解析的主机头,然而,仍然是脆弱的,最近报告我们。Django 1.3.3和Django 1.4.1中的主机头解析 - 特别是django.http.HttpRequest.get_host() - 在标题中不正确地处理用户名/密码信息。因此,例如,当在“validsite.com”上运行时,Django将接受以下Host标头:

Host: validsite.com:random@evilsite.com

使用这个,攻击者可以导致Django的部分 - 特别是密码重置机制 - 生成和显示任意URL给用户。

为了解决这个问题,正在修改HttpRequest.get_host()中的解析;包含潜在危险内容(例如用户名/密码对)的主机标头现在引发异常django.core.exceptions.SuspiciousOperation

此问题的详细信息最初作为安全公告在线发布。

Backwards incompatible changes

  • 新引入的GenericIPAddressField构造函数参数已经适应于匹配所有其他模型字段的参数。前两个关键字参数现在为verbose_name和name。

Other bugfixes and changes

  • 仅适用于适当的Python版本的子类HTMLParser(#18239)。
  • 向qs.bulk_create()添加了batch_size参数(#17788)。
  • 修复了管理过滤器中的一个小回归,其中格式错误的日期作为url参数传递导致未处理的ValidationError(#18530)。
  • 修复了在模板中访问权限时的无限循环错误(#18979)
  • 修复了一些Python 2.5兼容性问题
  • 修复了Content-Disposition标题中引用的文件名的问题(#19006)
  • transblocktrans标签中的上下文选项接受包含在单引号中的文字(#18881)。
  • 许多文档改进和修复。