owe*_*ncm 5 django wsgi http-headers amazon-elastic-beanstalk
上下文:我编写了一个Django应用程序,我现在已将其部署到Elastic Beanstalk(AWS).
在本地开发中,我一直在使用自定义请求标头SESSION_TOKEN,然后我可以使用它request.META.get('HTTP_SESSION_TOKEN').在生产中我看到错误,因为该标题是不可访问的(在我的Django服务器看到的所有请求中,它只是丢失了).
另外我的其他标准标题工作正常,它只缺少自定义标题.注意我没有设置HTTP_AUTHORIZATION,这与django rest_framework中缺少的Authorization标头不一样,是否需要apache?.
出了什么问题?如何在生产中访问后端的自定义标头?
mik*_*725 14
最有可能的SESSION_TOKEN标题被某些东西剥离了.来自Django安全咨询:
当HTTP标头放入WSGI环境中时,它们通过转换为大写,将所有短划线转换为下划线并预先加载HTTP_来规范化.例如,标头X-Auth-User将成为WSGI环境中的HTTP_X_AUTH_USER(因此也是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的开发服务器用于生产用途,但匹配常见生产服务器的行为会减少部署期间行为更改的表面区域.
如果您有任何自定义标题,则应使用连字符.
| 归档时间: |
|
| 查看次数: |
3815 次 |
| 最近记录: |