Django 1.5.8 版本发行说明¶
2014 年 5 月 14 日
Django 1.5.8 修复了 1.5.8 中的两个安全问题。
缓存可能会错误地允许存储和提供私有数据¶
在某些情况下,Django 可能允许缓存存储与特定会话相关的私有数据,然后将该数据提供给具有不同会话或根本没有会话的请求。这可能导致信息泄露,并可能成为缓存中毒的途径。
在使用 Django 会话时,Django 会设置一个 Vary: Cookie
头,以确保缓存不会向来自其他会话的请求提供缓存的数据。但是,较旧版本的 Internet Explorer(可能只有 Internet Explorer 6,以及如果在 Windows XP 或 Windows Server 2003 上运行的 Internet Explorer 7)无法处理 Vary
头与许多内容类型的组合。因此,如果请求是由 Internet Explorer 发出的,Django 会删除该头。
为了解决这个问题,已经移除了对这些较旧的 Internet Explorer 版本的特殊行为,并且不再从响应中删除 Vary
头。此外,对所有具有 Content-Disposition
头的 Internet Explorer 请求的 Cache-Control
头的修改也已被移除,因为发现它们具有类似的问题。
来自用户输入的格式错误的重定向 URL 未正确验证¶
重定向验证未正确验证某些格式错误的 URL,这些 URL 被某些浏览器接受。这使得用户可能意外地被重定向到不安全的 URL 。
Django 在某些情况下(例如 django.contrib.auth.views.login()
、django.contrib.comments
和 i18n)依赖于用户输入来将用户重定向到“成功”URL。对于这些重定向的安全性检查(即 django.utils.http.is_safe_url()
),未正确验证一些格式错误的 URL,例如 http:\\\\\\djangoproject.com
,这些 URL 可以被一些具有更自由 URL 解析的浏览器接受。
为了解决这个问题,is_safe_url()
中的验证已经加强,能够处理和正确验证这些格式错误的 URL。