2015年1月13日
Django1.7.3在1.7.2中修复了几个安全问题和错误。
当将HTTP标头放入WSGI环境中时,它们会通过转换为大写字母、将所有破折号转换为强调线和前置来进行规范化 HTTP_
.例如,标题 X-Auth-User
会变成 HTTP_X_AUTH_USER
在WSGI环境中(因此也在Django的环境中 request.META
词典)。
不幸的是,这意味着wsgi环境无法区分包含短划线的头和包含下划线的头: X-Auth-User
和 X-Auth_User
都成为 HTTP_X_AUTH_USER
. 这意味着,如果以安全敏感的方式使用头(例如,从前端代理传递身份验证信息),即使代理小心地除去 X-Auth-User
,攻击者可以提供 X-Auth_User
头(带下划线)并绕过此保护。
为了防止此类攻击,nginx和apache 2.4+默认情况下会从传入请求中删除包含下划线的所有头文件。Django的内置开发服务器现在也在做同样的事情。Django的开发服务器不建议用于生产,但与普通生产服务器的行为匹配会减少部署期间行为更改的表面积。
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
¶给出一个使用 ModelMultipleChoiceField
和 show_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 )
7月 22, 2024