Django 1.7.7发行说明

2015年3月18日

Django1.7.7在1.7.6中修复了几个错误和安全问题。

拒绝服务的可能性 strip_tags()

去年 strip_tags() 被更改为迭代工作。问题是,它处理的输入的大小可能会在每次迭代中增加,这会导致在 strip_tags() 。此问题仅影响尚未收到 a bugfix in HTMLParser 即:Python<2.7.7和3.3.5。一些操作系统供应商也已将针对Python错误的修复程序移植到其早期版本的包中。

为了解决这个问题, strip_tags() 如果检测到正在处理的字符串的长度增加,现在将返回原始输入。请记住,对于 strip_tags() HTML安全。所以永远不要把一个 strip_tags() 调用而不首先转义它,例如 escape() .

通过用户提供的重定向URL减轻了可能的XSS攻击

Django在某些情况下依赖于用户输入(例如 django.contrib.auth.views.login() and i18n) to redirect the user to an "on success" URL. The security checks for these redirects (namely django.utils.http.is_safe_url()) accepted URLs with leading control characters and so considered URLs like \x08javascript:... 安全。此问题当前不影响Django,因为我们只将此URL放入 Location 响应头和浏览器似乎忽略了那里的javascript。我们测试的浏览器还处理带有控制字符前缀的URL,例如 %08//example.com 作为相对路径,重定向到不安全的目标也不是问题。

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

错误修正

  • 修复了迁移中类的重命名,重命名子类会导致为引用超类的对象记录不正确的状态。 (#24354

  • 合并迁移冲突时,停止以干运行模式写入迁移文件。什么时候? makemigrations --merge 被调用 verbosity=3 迁移文件将写入 stdout (#24427