Django 1.4.4发行说明

2013年2月19日

Django1.4.4修复了1.4系列中以前的Django版本中存在的四个安全问题,以及其他几个错误和大量文档改进。

这是Django1.4系列中的第四个bugfix/security版本。

主机头中毒

Django的某些部分--独立于最终用户编写的应用程序--利用完整的URL,包括域名,这些URL是从HTTP主机报头生成的。Django的文档一段时间以来一直包含注释,建议用户如何配置Web服务器以确保只有有效的主机标头才能到达Django应用程序。然而,据我们报告,即使使用推荐的Web服务器配置,仍有一些技术可用于诱骗许多常见的Web服务器向应用程序提供错误的、可能是恶意的主机标头。

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

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

此主机验证在以下情况下被禁用 DEBUGTrue 或者在运行测试时。

XML反序列化

python标准库中的XML解析器容易受到许多通过外部实体和实体扩展的攻击。Django使用此分析器反序列化XML格式的数据库设备。此反序列化程序不用于不受信任的数据,但为了在Django 1.4.4中的安全方面出错,XML反序列化程序拒绝解析具有DTD(doctype定义)的XML文档,而DTD(doctype定义)关闭了这些攻击途径。

python标准库中的这些问题是CVE-2013-1664和CVE-2013-1665。更多可用信息 from the Python security team .

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

窗体集内存耗尽

Django的早期版本没有验证或限制客户机在表单集的管理表单中提供的表单计数数据,这使得通过强制创建大量表单来耗尽服务器的可用内存成为可能。

在django 1.4.4中,所有表单集都有严格执行的最大表单数(默认为1000,但可以通过 max_num formset工厂参数)。

管理历史视图信息泄漏

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

其他错误修复和更改

  • 防止事务状态从一个请求泄漏到下一个请求(19707)。

  • 将SQL命令语法更改为MySQL4兼容(19702)。

  • 增加了与旧的未加保护的MD5密码的向后兼容性(18144)。

  • 大量文档改进和修复。