Django 1.3.6 版本发行说明
2013 年 2 月 19 日
Django 1.3.6 修复了 1.3 系列中之前 Django 版本存在的四个安全问题。
这是 Django 1.3 系列中的第六个修复错误/安全性发布。
Host 头部中毒
Django 的某些部分(与最终用户编写的应用程序无关)使用包含域名的完整 URL,这些 URL 是根据 HTTP Host 头生成的。 Django 的文档已经包含了一些关于如何配置 Web 服务器以确保只有有效的 Host 头才能到达 Django 应用程序的建议。然而,有人向我们报告称,即使采用了建议的 Web 服务器配置,仍然有一些方法可以欺骗许多常见的 Web 服务器,使它们向应用程序提供错误且可能恶意的 Host 头。
因此,Django 1.3.6 添加了一个新的设置,ALLOWED_HOSTS
,它应包含站点的有效主机/域名的显式列表。如果调用 request.get_host()
的请求的 Host 标头与此列表中的条目不匹配,将引发 SuspiciousOperation
。有关 ALLOWED_HOSTS 设置的详细信息,请参阅文档。
在 Django 1.3.6 中,这个设置的默认值是 ['*']
(匹配任何主机),出于向后兼容性考虑,但我们强烈建议所有站点设置一个更加限制的值。
当 DEBUG
为 True
时或在运行测试时,主机验证会被禁用。
XML 反序列化
Python 标准库中的 XML 解析器容易受到外部实体和实体扩展攻击。 Django 使用此解析器对 XML 格式的数据库固件进行反序列化。固件反序列化器并非用于处理不受信任的数据,但为了在 Django 1.3.6 中确保安全,XML 反序列化器拒绝解析带有 DTD(DOCTYPE 定义)的 XML 文档,从而关闭了这些攻击途径。
Python 标准库中的这些问题是 CVE-2013-1664 和 CVE-2013-1665。可以从 Python 安全团队 获取更多信息。
Django 的 XML 序列化器不会创建带有 DTD 的文档,因此这不应该导致从 dumpdata
到 loaddata
的典型往返出现任何问题。但是,如果您向 loaddata
管理命令提供自己的 XML 文档,您需要确保它们不包含 DTD。
表单集内存耗尽
以前的 Django 版本没有验证或限制表单集管理表单中由客户端提供的表单计数数据,这使得通过强制创建大量表单来耗尽服务器可用内存成为可能。
在 Django 1.3.6 中,所有的表单集都有一个严格执行的最大表单数量限制(默认为 1000,但可以通过表单集工厂参数 max_num
设置得更高)。
管理员历史视图信息泄露
在以前的 Django 版本中,一个没有模型更改权限的管理员用户仍然可以通过其管理员历史日志查看实例的 Unicode 表示。 Django 1.3.6 现在将对象的管理员历史日志视图限制为具有该模型更改权限的用户。