Nginx - Host-Header vortäuschen

Nginx - Host-Header vortäuschen

Django-Apps verlassen sich für bestimmte Links usw. auf den Host-Header. In meinem Setup läuft eine Django-App hinter Nginx als Reverse-Proxy (mit einem nicht standardmäßigen server_name).

Entsprechend:

https://docs.djangoproject.com/en/3.1/topics/security/#host-header-validation

Selbst wenn Apache beispielsweise so konfiguriert ist, dass Ihre Django-Site von einem nicht standardmäßigen virtuellen Host mit festgelegtem ServerName bedient wird, ist es dennoch möglich, dass eine HTTP-Anforderung mit diesem virtuellen Host übereinstimmt und einen gefälschten Host-Header liefert.

Ich konnte keine Informationen darüber finden, ob und wie dies in Nginx möglich ist.

Ist es wirklich unsicher, in der Webanwendung blind zuzulassen, dass der Header von Nginx stammt?

Antwort1

Um den Header an die Reverse-Proxy-App weiterzuleiten , fügen Sie Ihrem / -Block Host:Folgendes hinzu :serverlocation

proxy_set_header Host $host;

Welche Werte $hostletztendlich möglich sind, hängt von der Konfiguration des virtuellen Nginx-Hosts ab.

Wenn Ihr serverBlock ein Block ist default_server, bedeutet dies, dass der Serverblock alle an einen virtuellen Host gesendeten Anfragen verarbeitet. In diesem Fall wird der Wert des HostHeaders an den Upstream-Server weitergegeben.

Um dies in diesem default_serverSzenario zu verhindern, verwenden Sie diese Version:

proxy_set_header Host example.com;

wo example.comist Ihr Domänenname.

Noch besser ist es, Nginx richtig zu konfigurieren, sodass default_serverder Block beispielsweise immer 404 zurückgibt und ein geeigneter virtueller Host mit dem richtigen Namen verwendet wird.

verwandte Informationen