Nginx Fügen Sie Cookies vom Proxyserver ein sicheres Flag hinzu

12

Mozilla hat gerade ein neues Tool veröffentlicht, mit dem Sie Ihre Website-Konfiguration überprüfen können. Observatory.mozilla.org

Der Scan beschwert sich jedoch über Cookies (-10 Punkte): Sitzungscookie ohne das Flag "Sicher" gesetzt ...

Leider kann der Dienst, der hinter meinem Nginx ausgeführt wird, den sicheren Header nur festlegen, wenn das SSL dort direkt beendet wird und nicht, wenn das SSL auf dem Nginx beendet wird. Daher ist das Flag "Sicher" bei den Cookies nicht gesetzt.

Ist es möglich, das "sichere" Flag mit nginx irgendwie an die Cookies anzuhängen? Das Ändern des Standorts / Pfads scheint möglich zu sein.

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_domain

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cookie_path

ST-DDT
quelle

Antworten:

11

Ich kenne zwei Möglichkeiten, dies zu tun, keine davon ist großartig. Das erste ist, proxy_cookie_path einfach so zu missbrauchen:

proxy_cookie_path / "/; secure";

Die zweite Möglichkeit besteht darin, die Anweisung more_set_headers aus dem Modul Headers More wie folgt zu verwenden :

more_set_headers 'Set-Cookie: $sent_http_set_cookie; secure';

Beides kann zu Problemen führen, da die Elemente blind hinzugefügt werden. Wenn der Upstream beispielsweise das sichere Flag setzt , senden Sie dem Client ein Duplikat wie das folgende:

Set-Cookie: foo=bar; secure; secure;

und im zweiten Fall, wenn die Upstream-App kein Cookie setzt, sendet nginx dies an den Browser:

Set-Cookie; secure;

Das ist natürlich doppelt so gut.

Ich denke, dieses Problem muss behoben werden, da viele Leute danach gefragt haben. Meiner Meinung nach wird eine Richtlinie wie diese benötigt:

proxy_cookie_set_flags * HttpOnly;
proxy_cookie_set_flags authentication secure HttpOnly;

aber leider existiert dies derzeit nicht :(

Larry
quelle
Der Cookie-Pfad sieht wirklich nach einer guten Problemumgehung aus. Ich denke, ich werde das zuerst versuchen. Danke für Ihre Hilfe.
ST-DDT
1
Ich habe im Forum eine Feature-Anfrage gestellt. hoffentlich interessiert sich der Autor dafür.
Franklin Yu
3

Versuchen Sie, nginx_cookie_flag_module zu verwenden . Es wird Ihr Problem lösen.

Haftungsausschluss: Ich bin der Autor des Moduls.

Airis
quelle
3
Könnten Sie näher erläutern, wie das Modul eingerichtet und konfiguriert ist? Die README-Datei scheint darauf hinzudeuten, dass Nginx neu erstellt werden muss, was in vielen Setups möglicherweise nicht akzeptabel ist.
Thomas Nyman
Ja, für die Verwendung dieses Moduls muss Nginx neu erstellt werden. Andernfalls könnten Sie die Direktive nicht verwenden. Dies gilt für alle Module von Drittanbietern. In vielen Fällen dauert die Neuerstellung von Nginx nicht lange.
Airis
@ThomasNyman Der Wiederaufbau kann vermieden werden, indem für NGINX Plus bezahlt wird, wie in den Anweisungen von NGINX erläutert .
Franklin Yu
1
@ Airis Also bist du der Autor? Großartige Arbeit, Kumpel, aber besser, einen Haftungsausschluss hinzuzufügen.
Franklin Yu
@Aris Wir haben versucht, das Modul mit der Version 1.17.1 von ngnix: alpine zu verwenden, aber beim Versuch, die Module in nginx.conf zu laden, treten folgende Fehler auf. 'Modul "/usr/local/nginx/modules/ngx_http_cookie_flag_filter_module.so" ist nicht binär kompatibel'
Lokesh