Nginx Dodaj bezpieczną flagę do plików cookie z serwera proxy

12

Mozilla właśnie wydała nowe narzędzie do sprawdzania konfiguracji twojej witryny. observatory.mozilla.org

Ale skan narzeka na pliki cookie (-10 punktów): zestaw plików cookie sesji bez flagi Bezpieczne ...

Niestety usługa działająca za moim nginx może ustawić bezpieczny nagłówek tylko wtedy, gdy SSL kończy się tam bezpośrednio, a nie wtedy, gdy SSL kończy się na nginx. Zatem flaga „Bezpieczna” nie jest ustawiona na ciasteczkach.

Czy można w jakiś sposób dołączyć flagę „bezpieczne” do plików cookie przy użyciu nginx? Modyfikacja lokalizacji / ścieżki wydaje się możliwa.

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
źródło

Odpowiedzi:

11

Znam dwa sposoby na zrobienie tego, żaden z nich nie jest świetny. Pierwszym jest nadużycie ścieżki proxy_cookie_path w następujący sposób:

proxy_cookie_path / "/; secure";

Drugim jest użycie dyrektywy more_set_headers z modułu Headers More w następujący sposób:

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

Oba mogą powodować problemy, ponieważ na ślepo dodają przedmioty. Na przykład, jeśli upstream ustawi bezpieczną flagę, zakończysz wysyłanie klientowi takiego duplikatu:

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

aw drugim przypadku, jeśli aplikacja nadrzędna nie ustawi pliku cookie, nginx wyśle ​​to do przeglądarki:

Set-Cookie; secure;

Oczywiście jest to podwójne plus.

Myślę, że ten problem należy rozwiązać, ponieważ wiele osób o to pytało. Moim zdaniem potrzebna jest taka dyrektywa:

proxy_cookie_set_flags * HttpOnly;
proxy_cookie_set_flags authentication secure HttpOnly;

ale niestety obecnie nie istnieje :(

Larry
źródło
Ścieżka pliku cookie naprawdę wygląda na miłe obejście. Myślę, że najpierw spróbuję. Dzięki za pomoc.
ST-DDT,
1
Złożyłem prośbę o funkcję na forum; mam nadzieję, że autor jest tym zainteresowany.
Franklin Yu,
3

Spróbuj użyć modułu nginx_cookie_flag_module . To rozwiąże twój problem.

Oświadczenie: Jestem autorem modułu.

Airis
źródło
3
Czy możesz rozwinąć sposób konfiguracji i konfiguracji modułu. Plik README wydaje się sugerować, że wymaga przebudowania nginx, co może być nie do zaakceptowania w wielu konfiguracjach.
Thomas Nyman
Tak, użycie tego modułu wymaga przebudowania Nginx. W przeciwnym razie nie można użyć tej dyrektywy. Dotyczy to wszystkich modułów innych firm. W wielu przypadkach przebudowa nginx nie zajmuje dużo czasu.
Airis
@ThomasNyman Odbudowy można uniknąć, płacąc za NGINX Plus, jak wyjaśniono w instrukcji od NGINX .
Franklin Yu,
1
@Airis Więc jesteś autorem? Świetna robota, kolego, ale lepiej dodać zastrzeżenie.
Franklin Yu
@Aris próbowaliśmy użyć modułu z wersją ngnix: alpine 1.17.1, ale napotykamy następujące błędy, gdy próbujemy załadować moduły do ​​nginx.conf. „moduł” /usr/local/nginx/modules/ngx_http_cookie_flag_filter_module.so „nie jest kompatybilny binarnie”
Lokesh