Django 1.7.7 release notes

2015年3月18日

Django 1.7.7修复了几个错误和安全问题在1.7.6。

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。

Bugfixes

  • 修复在重命名子类会导致对引用超类(#24354)的对象记录不正确状态的迁移中的类重命名。
  • 在合并迁移冲突时停止以空运行模式写入迁移文件。When makemigrations --merge is called with verbosity=3 the migration file is written to stdout (#24427).