Nginx - 偽造主機標頭

Nginx - 偽造主機標頭

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,並使用具有正確名稱的正確虛擬主機。

相關內容