Django 1.6.11 发行说明 — Django 文档

来自菜鸟教程
Django/docs/2.2.x/releases/1.6.11
跳转至:导航、​搜索

Django 1.6.11 发行说明

2015 年 3 月 18 日

Django 1.6.11 修复了 1.6.10 中的两个安全问题。

strip_tags() 拒绝服务的可能性

去年 strip_tags() 改为迭代工作。 问题是它处理的输入的大小在每次迭代时都会增加,这会导致 strip_tags() 中的无限循环。 此问题仅影响尚未收到的 Python 版本 :bpo:`HTMLParser <20288> 中的错误修正` ; 即 Python < 2.7.7 和 3.3.5。 一些操作系统供应商还将 Python 错误的修复程序向后移植到其早期版本的软件包中。

为了解决这个问题,strip_tags() 现在将在检测到它正在处理的字符串长度增加时返回原始输入。 请记住,绝对不保证 strip_tags() 的结果是 HTML 安全的。 所以永远不要在没有先转义的情况下将 strip_tags() 调用的结果标记为安全,例如使用 escape()


通过用户提供的重定向 URL 缓解可能的 XSS 攻击

Django 在某些情况下依赖于用户输入(例如 django.contrib.auth.views.login()i18n) 将用户重定向到“成功”的 URL。 这些重定向的安全检查(即 django.utils.http.is_safe_url())接受带有前导控制字符的 URL,因此认为像 \x08javascript:... 这样的 URL 是安全的。 这个问题目前不会影响 Django,因为我们只将此 URL 放入 Location 响应标头中,而浏览器似乎忽略了那里的 JavaScript。 我们测试的浏览器也将带有控制字符前缀的 URL,例如 %08//example.com 视为相对路径,因此重定向到不安全的目标也不是问题。

但是,如果开发人员依赖 is_safe_url() 提供安全的重定向目标并将此类 URL 放入链接中,则他们可能会遭受 XSS 攻击,因为某些浏览器(例如 Google Chrome)会忽略 URL 开头的控制字符在锚 href 中。