
Django 應用程式依賴某些連結的主機頭等server_name
。
根據:
https://docs.djangoproject.com/en/3.1/topics/security/#host-header-validation
例如,即使 Apache 配置為從設定了 ServerName 的非預設虛擬主機為您的 Django 網站提供服務,HTTP 請求仍然有可能匹配該虛擬主機並提供虛假的 Host 標頭
我找不到任何關於是否或如何在 nginx 中完成它的資訊。
在 webapp 中盲目允許依賴來自 nginx 的 header 真的不安全嗎?
答案1
要將標頭傳遞Host:
到反向代理應用程序,請將以下內容新增至您的server
/location
區塊:
proxy_set_header Host $host;
最終可能的值取決於 nginx 虛擬主機配置$host
。
如果您的server
區塊是default_server
區塊,則表示伺服器區塊將處理傳送到任何虛擬主機的任何請求。在這種情況下,標頭的值Host
會傳播到上游伺服器。
為了防止這種default_server
情況發生,請使用以下版本:
proxy_set_header Host example.com;
example.com
你的網域在哪裡。
更好的是正確配置 nginx,以便default_server
區塊始終返回 404,並使用具有正確名稱的正確虛擬主機。