Django 1.3.6 release notes

2013年2月19日

Django 1.3.6修复了1.3系列中以前的Django版本中出现的四个安全问题。

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

Host header poisoning

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

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

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

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

XML deserialization

Python标准库中的XML解析器容易受到通过外部实体和实体扩展的大量攻击。Django使用这个解析器反序列化XML格式的数据库fixture。夹具解串器不适用于不受信任的数据,但为了在Django 1.3.6中错误安全,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.3.6中,所有表单都具有严格强制的最大数量的表单(默认为1000,尽管它可以通过max_num formset factory参数设置得更高)。

Admin history view information leakage

Django 1.3.6现在将对象的管理历史日志视图限制为具有该模型的更改权限的用户。