2013年2月19日
Django1.3.6修复了1.3系列中以前的Django版本中存在的四个安全问题。
这是django 1.3系列中的第六个bugfix/security版本。
Django的某些部分--独立于最终用户编写的应用程序--利用完整的URL,包括域名,这些URL是从HTTP主机报头生成的。Django的文档一段时间以来一直包含注释,建议用户如何配置Web服务器以确保只有有效的主机标头才能到达Django应用程序。然而,据我们报告,即使使用推荐的Web服务器配置,仍有一些技术可用于诱骗许多常见的Web服务器向应用程序提供错误的、可能是恶意的主机标头。
因此,Django 1.3.6添加了一个新设置, ALLOWED_HOSTS
,其中应包含此网站的有效主机/域名的显式列表。主机头与此列表中的条目不匹配的请求将引发 SuspiciousOperation
如果 request.get_host()
被称为。有关详细信息,请参阅 ALLOWED_HOSTS
设置。
Django 1.3.6中此设置的默认值为 ['*']
(匹配任何主机),为了向后兼容,但我们强烈建议所有站点设置更严格的值。
此主机验证在以下情况下被禁用 DEBUG
是 True
或者在运行测试时。
python标准库中的XML解析器容易受到许多通过外部实体和实体扩展的攻击。Django使用此分析器反序列化XML格式的数据库设备。fixture反序列化程序不用于不受信任的数据,但为了在django 1.3.6中的安全方面出错,XML反序列化程序拒绝解析具有DTD(doctype定义)的XML文档,而DTD(doctype定义)关闭了这些攻击途径。
python标准库中的这些问题是CVE-2013-1664和CVE-2013-1665。更多可用信息 from the Python security team .
Django的XML序列化程序不使用DTD创建文档,因此这不应导致典型的往返于 dumpdata
到 loaddata
,但如果将自己的XML文档提供给 loaddata
管理命令,您需要确保它们不包含DTD。
Django的早期版本没有验证或限制客户机在表单集的管理表单中提供的表单计数数据,这使得通过强制创建大量表单来耗尽服务器的可用内存成为可能。
在django 1.3.6中,所有表单集都有严格执行的最大表单数(默认为1000,但可以通过 max_num
formset工厂参数)。
在Django的早期版本中,没有模型更改权限的管理员用户仍然可以通过其管理员历史记录日志查看实例的Unicode表示形式。Django 1.3.6现在将对象的管理历史日志视图限制为具有该模型更改权限的用户。
7月 22, 2024