Django 1.7.3发行说明

2015年1月13日

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

通过下划线/短划线合并的wsgi头欺骗

当HTTP头被放置到wsgi环境中时,它们将通过转换为大写、将所有破折号转换为下划线和前置字符进行规范化。 HTTP_ . 例如,头 X-Auth-User 将成为 HTTP_X_AUTH_USER 在WSGi环境中(因此也在Django的环境中) request.META 字典)。

不幸的是,这意味着wsgi环境无法区分包含短划线的头和包含下划线的头: X-Auth-UserX-Auth_User 都成为 HTTP_X_AUTH_USER . 这意味着,如果以安全敏感的方式使用头(例如,从前端代理传递身份验证信息),即使代理小心地除去 X-Auth-User ,攻击者可以提供 X-Auth_User 头(带下划线)并绕过此保护。

为了防止此类攻击,nginx和apache 2.4+默认情况下会从传入请求中删除包含下划线的所有头文件。Django的内置开发服务器现在也在做同样的事情。Django的开发服务器不建议用于生产,但与普通生产服务器的行为匹配会减少部署期间行为更改的表面积。

通过用户提供的重定向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()) didn't strip leading whitespace on the tested URL and as such considered URLs like \njavascript:... 安全。如果开发商依赖 is_safe_url() 为了提供安全的重定向目标并将这样的URL放到链接中,他们可能会遭受XSS攻击。此错误当前不影响Django,因为我们只将此URL放入 Location 响应头和浏览器似乎忽略了那里的javascript。

拒绝服务攻击 django.views.static.serve

在旧版本的django中, django.views.static.serve() 查看一次读取它服务的一行文件。因此,没有换行符的大文件将导致内存使用量等于该文件的大小。攻击者可以利用此漏洞,同时请求许多大型文件,从而发起拒绝服务攻击。此视图现在以块的形式读取文件,以防止大量的内存使用。

但是,请注意,此视图始终带有一个警告,即它不是为生产使用而硬化的,只能用作开发辅助工具。如果您不这样做的话,现在可能是审核项目并在生产中使用真正的前端Web服务器提供文件服务的好时机。

数据库拒绝服务 ModelMultipleChoiceField

给出一个使用 ModelMultipleChoiceFieldshow_hidden_initial=True (不是文档化的API),用户可以通过提交字段数据的重复值来导致不合理数量的SQL查询。中的验证逻辑 ModelMultipleChoiceField 现在,删除提交的值以解决此问题。

错误修正

  • pbkdf2密码散列器的默认迭代计数增加了25%。1.7中无意中省略了正常主要发布过程的这一部分。这种向后兼容的更改不会影响子类化的用户 django.contrib.auth.hashers.PBKDF2PasswordHasher 更改默认值。

  • 修正了处理非ASCII引用头时CSRF中间件崩溃的问题 (#23815

  • 修复了 django.contrib.auth.redirect_to_login 传递时的视图 reverse_lazy() python 3的结果 (#24097

  • 为希腊语添加了正确的格式 (el ) (#23967

  • 修复了在多个操作与同一模型交互的迁移取消应用时的迁移崩溃 (#24110