簡體   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