8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

发送给 Django 的请求中缺少自定义标头

hedbisker 2月前

34 0

背景:我编写了一个 Django 应用程序,现在已将其部署到 Elastic Beanstalk (AWS)。在本地开发中,我一直在使用自定义请求标头 SESSION_TOKEN,然后可以使用 r 访问它...

背景:我编写了一个 Django 应用程序,现在已将其部署到 Elastic Beanstalk(AWS)。

在本地开发中,我一直在使用自定义请求标头 SESSION_TOKEN ,然后可以使用 进行访问 request.META.get('HTTP_SESSION_TOKEN') 。在生产中,我看到错误,因为该标头不可访问(也就是说,我的 Django 服务器看到的所有请求中都缺少该标头)。

此外,我的其他标准标头工作正常,只有自定义标头缺失。请注意,我没有设置 HTTP_AUTHORIZATION ,这与 django rest_framework 中缺少授权标头的问题不同 ,是 apache 的错吗? .

出了什么问题?如何在生产中访问后端的自定义标头?

帖子版权声明 1、本帖标题:发送给 Django 的请求中缺少自定义标头
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由hedbisker在本站《django》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我抓狂了,因为标题不会显示在 Django 中,第二部分解决了我的问题,我的名字中有下划线

  • 如果您正在制作 API,我建议使用令牌与会话 ID 的概念。我喜欢使用内置令牌身份验证的 DRF 开发 API - django-rest-framework.org/api-guide/authentication/…

  • 我最初使用 Django 作为本机应用程序的 API 后端,因此这是显而易见的做法。 后来我转而构建 Web 客户端,但担心 cookie 的 CSRF 问题,而我目前的方法运行良好,所以我保留了它 :)

  • 您不使用标准 Django 会话应用程序的任何原因,该应用程序使用 cookie 而不是标头来传递会话 ID。这似乎更安全,因为您可以指定仅在安全连接等情况下使用 cookie(不是 100% 万无一失,但至少是有点)

  • 将请求中的标头设置为 Session-Token 并将其读出为 HTTP_SESSION_TOKEN 解决了​​该问题。谢谢!

  • 最有可能的是, 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 的开发服务器用于生产,但匹配常见生产服务器的行为可以减少部署期间行为更改的影响范围。

    如果您有任何自定义标题,则应使用连字符。

返回
作者最近主题: