Nginx Ajouter un indicateur sécurisé aux cookies du serveur mandaté

12

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

Mais l'analyse se plaint des cookies (-10 points): cookie de session défini sans l'indicateur Secure ...

Malheureusement, le service exécuté derrière mon nginx ne peut définir l'en-tête sécurisé que si SSL se termine directement là-bas 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'ajouter le drapeau "sécurisé" aux cookies en utilisant en quelque sorte nginx? Il semble possible de modifier l'emplacement / le chemin.

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
la source

Réponses:

11

Je connais deux façons de le faire, ni l'une ni l'autre. La première consiste à abuser de proxy_cookie_path comme ceci:

proxy_cookie_path / "/; secure";

La seconde consiste à utiliser la directive more_set_headers du module Headers More comme ceci:

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

Ces deux éléments peuvent entraîner des problèmes car ils ajoutent aveuglément les éléments. Par exemple, si l'amont définit l' indicateur sécurisé , vous finirez par envoyer au client un duplicata comme ceci:

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

et dans le deuxième cas, si l'application en amont ne définit pas de cookie, nginx enverra ceci au navigateur:

Set-Cookie; secure;

C'est doubleplusungood, bien sûr.

Je pense que ce problème doit être résolu car 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 :(

Larry
la source
Le chemin des cookies ressemble vraiment à une bonne solution de contournement. Je pense que je vais essayer cela en premier. Merci de votre aide.
ST-DDT du
1
J'ai soulevé une demande de fonctionnalité dans le forum; j'espère que l'auteur s'y intéresse.
Franklin Yu
3

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

Avertissement: je suis l'auteur du module.

Airis
la source
3
Pourriez-vous expliquer comment le module est installé et configuré. Le fichier README semble suggérer qu'il nécessite la reconstruction de nginx, ce qui pourrait ne pas être acceptable dans de nombreuses configurations.
Thomas Nyman
Oui, l'utilisation de ce module nécessite la reconstruction de Nginx. Sinon, vous ne pourriez pas utiliser sa directive. Cela s'applique à tous les modules tiers. Dans de nombreux cas, la reconstruction de nginx ne prend pas beaucoup de temps.
Airis
@ThomasNyman Rebuilding peut être évité en payant NGINX Plus, comme expliqué dans les instructions de NGINX .
Franklin Yu
1
@Airis Vous êtes donc l'auteur? Excellent travail, mec, mais mieux vaut ajouter un avertissement.
Franklin Yu
@Aris, nous avons essayé d'utiliser le module avec la version 1.17.1 de ngnix: alpine, mais nous rencontrons les erreurs suivantes une fois que nous essayons de charger les modules dans nginx.conf. 'module "/usr/local/nginx/modules/ngx_http_cookie_flag_filter_module.so" n'est pas compatible binaire'
Lokesh