簡體   English   中英

使用 HTTPS 應用程序負載均衡器時,Django Fargate Docker 中的 CSRF 錯誤

[英]CSRF errors in Django Fargate Docker when using HTTPS Application Load Balancer

我在應用程序負載均衡器后面使用 Docker 在 AWS Fargate 上實現了 Django web 應用程序。

當我嘗試登錄 web 應用程序時,我得到以下信息:

錯誤 403 CSRF verification failed. Request aborted. CSRF verification failed. Request aborted.

環境:我正在按照 AWS 的最佳實踐使用 Application Load Balancer (ALB)。 當我運行 web 應用程序的多個實例時,ALB 還具有 TLS 證書以正確處理 HTTPS。

我試圖通過強制 ALB 目標的粘性來解決這個問題,假設循環將請求放在不同的服務器上。 我還將 docker 實例的數量減少到一個(因此沒有循環)。

這些都沒有任何區別。

當我直接連接到 docker 實例(無負載均衡器)並且我在應用程序負載均衡器上僅使用 HTTP 時,我設法登錄(以使 CSRF 正常工作) - 禁用重定向到 Z0E8433F9A404F16F32B10Z0E8433F9A404F16F32B166。 這讓我相信問題出在負載均衡器的 HTTPS 部分和 Django web 應用程序之間。

禁用 HTTPS 還沒有准備好生產,所以我回到了第一方。 我在這里看到了一個類似的問題,沒有答案: django 帖子在切換到負載均衡器后收到 CSRF 驗證失敗

在對實時系統進行調試作為臨時措施后,潛在的問題變得清晰起來。

引用者檢查失敗 - https://test.domain.tld/path/與任何受信任的來源都不匹配。

解決方法是通過Django中的CSRF_TRUSTED_ORIGINS參數。 Django 文檔的引用:

    CSRF_TRUSTED_ORIGINS
    Default: [] (Empty list)
    
    A list of hosts which are trusted origins for unsafe requests (e.g. POST). 
For a secure unsafe request, Django’s CSRF protection requires that the request have a Referer header that matches the origin present in the Host header. 
This prevents, for example, a POST request from subdomain.example.com from succeeding against api.example.com. 
If you need cross-origin unsafe requests over HTTPS, continuing the example, add "subdomain.example.com" to this list. 
The setting also supports subdomains, so you could add ".example.com", for example, to allow access from all subdomains of example.com.

在此線程中可以找到類似的討論和解決方案。 CSRF 驗證在使用 HTTPS 的 Django 上不起作用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM