Nginx Ajouter un drapeau sécurisé aux cookies du server proxy

Mozilla vient de sortir un nouvel outil pour vérifier la configuration de votre site Web. observatory.mozilla.org

Mais le scan se plaint de Cookies (-10 points): Jeu de cookies de session sans le drapeau Secure …

Malheureusement, le service exécuté derrière mon nginx ne peut définir l'en-tête sécurisé que si le SSL se termine directement et non lorsque SSL se termine sur le nginx. Ainsi, le drapeau "Secure" n'est pas défini sur les cookies.

Est-il possible d'append le drapeau "sécurisé" aux cookies en utilisant nginx? Modifier l'location / le path semble être possible.

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

Je connais deux façons de faire ça, ni l'un ni l'autre. Le premier est de simplement abuser de proxy_cookie_path comme ceci:

proxy_cookie_path / "/; secure"; 

La seconde est d'utiliser la directive more_set_headers du module Headers More comme ceci:

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

Les deux peuvent introduire des problèmes parce qu'ils ajoutent aveuglément les articles. Par exemple, si l'amont définit le drapeau sécurisé , vous finirez par envoyer au client un doublon comme celui-ci:

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

et dans le second cas si l'application amont ne met pas un cookie nginx l'enverra au browser:

 Set-Cookie; secure; 

C'est doubleplusungood, bien sûr.

Je pense que ce problème doit être réglé comme beaucoup de gens l'ont demandé. À mon avis, une directive est nécessaire quelque chose comme ceci:

 proxy_cookie_set_flags * HttpOnly; proxy_cookie_set_flags authentication secure HttpOnly; 

mais hélas, cela n'existe pas actuellement 🙁

Essayez d'utiliser nginx_cookie_flag_module . Cela résoudra votre problème.