Django 1.6.11 release notes

2015年3月18日

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

Denial-of-service possibility with strip_tags()

去年strip_tags()已更改为迭代工作。问题是,每次迭代时,处理的输入的大小会增加,导致strip_tags()中出现无限循环。此问题仅影响在HTMLParser中未收到错误修正的Python版本;即Python一些操作系统供应商还将Python错误的修复迁移到早期版本的包中。

为了解决这个问题,strip_tags()现在将返回原始输入,如果它检测到它处理的字符串的长度增加。请记住,绝对不保证关于strip_tags()是HTML安全的结果。因此,请不要将strip_tags()调用的结果标记为安全,而不首先转义它,例如使用escape()

Mitigated possible XSS attack via user-supplied redirect URLs

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

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