web-dev-qa-db-fra.com

Nginx Ajouter un drapeau sécurisé aux cookies à partir du serveur proxé

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

Mais le scan se plaint des cookies (-10 points): Séance Cookie Set sans le drapeau sécurisé ...

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

Est-il possible d'ajouter le drapeau "sécurisé" aux cookies en quelque sorte à l'aide de Nginx? Modifier l'emplacement/chemin 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

12
ST-DDT

Je sais que deux façons de le faire, ce n'est pas très grand. Le premier est d'abuser de proxy_cookie_path comme ceci:

proxy_cookie_path / "/; secure";

La seconde consiste à utiliser la directive de plus_set_headers à partir du module en-tête davantage comme ceci:

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

Ces deux peuvent introduire des problèmes car ils ajoutent aveuglément les articles. Par exemple, si l'amont définit le Secure Drapeau, vous allez remettre au client un duplicata comme celui-ci:

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

et dans le second cas si l'application en amont ne définit pas un cookie nginx enverra ceci au navigateur:

Set-Cookie; secure;

Ceci est bien sûr doubleplusungood.

Je pense que ce problème doit être réparé autant de personnes qui l'ont posée à ce sujet. À 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 :(

11
Larry

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

Disclaimer: Je suis l'auteur du module.

3
Airis