![](/img/trans.png)
[英]How to safely redirect to HTTPS on Django app not behind a proxy?
[英]Django: redirect http to https safely for Heroku app
我試圖將我的 Django + Heroku 應用程序從http
重定向到https
,但我很驚訝我沒有找到任何安全和直接的方法。
問題
您已經配置了一個 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.