Django 1.4.4 release notes

2013年2月19日

Django 1.4.4修复了1.4系列中以前的Django版本中存在的四个安全问题,以及其他一些错误和许多文档改进。

这是Django 1.4系列中的第四个bug修复/安全版本。

Host header poisoning

Django的一些部分 - 独立于最终用户编写的应用程序 - 使用从HTTP主机头生成的完整URL,包括域名。Django的文档已经有一段时间包含注释,建议用户如何配置Web服务器,以确保只有有效的主机头可以到达Django应用程序。然而,已经向我们报告,即使使用推荐的网络服务器配置,仍然存在可用于欺骗许多常见网络服务器以向应用提供不正确且可能是恶意的主机报头的技术。

因此,Django 1.4.4添加了一个新设置,ALLOWED_HOSTS,其中包含此网站的有效主机/域名的显式列表。如果调用request.get_host(),则主机头与此列表中的条目不匹配的请求将引发SuspiciousOperation有关完整的详细信息,请参阅ALLOWED_HOSTS设置的文档。

为了向后兼容,Django 1.4.4中此设置的默认值为['*'](匹配任何主机),但我们强烈建议所有网站设置更严格的值。

DEBUGTrue或运行测试时,将禁用此主机验证。

XML deserialization

Python标准库中的XML解析器容易受到通过外部实体和实体扩展的大量攻击。Django使用这个解析器反序列化XML格式的数据库fixture。这个解串器不是用于不受信任的数据,但为了在Django 1.4.4的安全性方面错误,XML解串器拒绝解析具有DTD(DOCTYPE定义)的XML文档,这封闭了这些攻击途径。

Python标准库中的这些问题是CVE-2013-1664和CVE-2013-1665。更多信息,来自Python安全团队的

Django的XML序列化程序不会使用DTD创建文档,因此这不会导致从dumpdataloaddata的典型往返的任何问题,但如果您提供自己的XML文档到loaddata管理命令,您将需要确保它们不包含DTD。

Formset memory exhaustion

先前版本的Django没有验证或限制客户端在表单集管理表单中提供的表单计数数据,从而可能通过强制创建非常大量的表单来耗尽服务器的可用内存。

在Django 1.4.4中,所有表单都具有严格强制的最大数量的表单(默认为1000个,尽管它可以通过max_num formset factory参数设置得更高)。

Admin history view information leakage

在以前的Django版本中,对模型没有更改权限的管理用户仍然可以通过其管理历史日志查看实例的unicode表示。Django 1.4.4现在将对象的管理历史日志视图限制为具有该模型的更改权限的用户。

Other bugfixes and changes

  • 防止事务状态从一个请求泄漏到下一个请求(#19707)。
  • 将SQL命令语法更改为MySQL 4兼容(#19702)。
  • 添加了与旧的未加密MD5密码的向后兼容性(#18144)。
  • 许多文档改进和修复。