繁体   English   中英

Django:为 Heroku 应用安全地将 http 重定向到 https

[英]Django: redirect http to https safely for Heroku app

我试图将我的 Django + Heroku 应用程序从http重定向到https ,但我很惊讶我没有找到任何安全和直接的方法。

根据 Heroku 的说法

问题

您已经配置了一个 SSL 端点,现在您希望您的应用程序对所有请求使用 https。

分辨率

重定向需要在应用程序级别执行,因为 Heroku 路由器不提供此功能。 您应该将重定向逻辑编码到您的应用程序中。

在幕后,Heroku 路由器(覆盖)写入 X-Forwarded-Proto 和 X-Forwarded-Port 请求标头。 该应用程序检查 X-Forwarded-Proto 并在它不是 https 而是 http 时使用重定向响应进行响应。

...

姜戈

SECURE_SSL_REDIRECT设置为True

所以必须在Django完成。 这是我找到的最完整的答案这个也是类似的。

Django 1.8 将为非 HTTPS 重定向提供核心支持(从django-secure集成):

 SECURE_SSL_REDIRECT = True SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

为了处理SECURE_SSL_REDIRECT ,您必须使用SecurityMiddleware

 MIDDLEWARE = [ ... 'django.middleware.security.SecurityMiddleware', ]

请注意,两者都使用

SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')

似乎没有这个设置,它在 Heroku 上不起作用。 现在是有趣/可怕的部分。 文档中所述:

SECURE_SSL_REDIRECT

...

如果将此设置为 True 会导致无限重定向,则可能意味着您的站点在代理后面运行,并且无法分辨哪些请求是安全的,哪些不是。 您的代理可能会设置一个标头来指示安全请求; 您可以通过找出该标头是什么并相应地配置SECURE_PROXY_SSL_HEADER设置来纠正问题。

然后,检查SECURE_PROXY_SSL_HEADER

警告

如果您在不知道自己在做什么的情况下进行设置,您可能会在您的站点中打开安全漏洞。 如果你没有在你应该设置的时候设置它。 认真的。

这让我想找到一个更安全的解决方案......在另一个问题中它说它应该没问题,但我认为它不足以令人信服地忽略这样的警告。

Django 真的没有任何其他可以安全实施的解决方案吗?

我使用的是 1.11 版


更新:

我找到了django-sslify 包,但它也需要设置SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') ,所以我想它在潜在安全漏洞方面没有区别。 如果这个假设是错误的,请纠正我。

我参加这个聚会迟到了,但我认为这里的关键是简单地了解你在做什么。 我希望我明白我在做什么,但老实说我不是 100% 确定。 我认为 HTTP_X_FORWARDED_PROTO 如果你盲目使用它是危险的,因为它让 Django 认为你正在接收 HTTPS 请求(即使 HTTP_X_FORWARDED_PROTO 实际上是欺骗的)。

但是,如果您支持正常运行的负载平衡/代理(如 AWS),那么您可以确信 HTTP_X_FORWARDED_PROTO 设置正确。 在这种情况下, HTTP_X_FORWARDED_PROTO 用于告诉 Django 没问题,不要担心(因为您相信代理不允许通过欺骗头),并停止尝试不断重定向到 SSL。

最后,即使您没有使用 SECURE_SSL_REDIRECT = True(例如,如果在访问 Django 之前在正确配置的 Web 服务器中发生重定向),代理/负载平衡器后面的 HTTP_X_FORWARDED_PROTO 也是必要的,因为它也会影响 is_secure() 函数请求,如果您的代理正在吞下原始请求(例如,从客户端和您的代理/负载均衡器之间的 HTTPS 到您的代理/负载均衡器和 Web 服务器之间的 HTTP,这是很常见的)。

来源: https : //docs.djangoproject.com/en/3.0/ref/settings/#std : setting-SECURE_PROXY_SSL_HEADER但我不得不多次阅读它才能将所有这些放在我的脑海中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM