[Web] Mise en place des headers pour Nginx

 

Mise en place des headers pour Nginx

 

Article original Publié le : 26 janvier 2018

Mise a jour le :


Suite a la mise en place d’un site avec Nginx, il manque des headers pour plus de sécurité comme on peux le constater depuis le site securityheaders ou j’obtiens  un D.

Pour la partie certificat/cipher depuis ssllabs je suis en A

 

Pour la correction, c’est dans le vhost du site que ça se passe et dans le block suivant

server {
    listen 443 ssl http2;
    server_name site.domaine.local;
    access_log /var/log/nginx/site.access.log;
    error_log /var/log/nginx/site.error.log;
...

 

1 – Strict-Transport-Security

Ajouter la directive suivante

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;

Le paramètre includeSubDomains est facultatif  et indique au navigateur que la stratégie HSTS s’applique également à tous les sous-domaines du domaine actuel.

Le paramètre always garantit que l’en-tête est défini pour toutes les réponses.

Plus d’info: https://www.nginx.com/blog/http-strict-transport-security-hsts-and-nginx/

 

2 – X-XSS-Protection

Ajouter la directive suivante

add_header X-Xss-Protection "1; mode=block" always;

Le cross-site scripting est un type de faille de sécurité des sites web permettant d’injecter du contenu dans une page.

Plus d’info: https://www.kiwii.ch/fr/marketing-digital/securiser/verifier-securite-entetes-http/

 

3 – X-Content-Type-Options

Ajouter la directive suivante

add_header X-Content-Type-Options "nosniff" always;

L’en-tête X-Content-Type-Options vous permet de rejeter des éléments avec des types MIME incorrects.

Plus d’info: https://www.noobunbox.net/serveur/securite/securiser-https-nginx

 

4 – X-Content-Type-Options

Ajouter la directive suivante

add_header Feature-Policy "midi none;notifications none;push none;sync-xhr none;microphone none;camera none;magnetometer none;gyroscope none;speaker self;vibrate none;fullscreen self;payment none;";

L’entête Feature-Policy permet aux propriétaires de sites d’activer et de désactiver des fonctionnalités de navigateur et des API spécifiques, exemple la camera, micro … Sur l’entête ci dessous,je désactive toutes les fonctionnalités non nécessaires à mon site.

Plus d’info: https://fearby.com/article/set-up-feature-policy-referrer-policy-and-content-security-policy-headers-in-nginx/ et https://scotthelme.co.uk/a-new-security-header-feature-policy/ ou https://zinoui.com/blog/security-http-headers#feature-policy

 

5 – Referrer-Policy

Ajouter la directive suivante

add_header Referrer-Policy "same-origin" always;

Donne le contrôle de la valeur de référence.

Plus d’info: https://www.kiwii.ch/fr/marketing-digital/securiser/verifier-securite-entetes-http/

 

6 – Content-Security-Policy

Ajouter la directive suivante

add_header Content-Security-Policy "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval';" always;

ou

add_header Content-Security-Policy "default-src 'self' ; frame-src 'self' ; child-src 'self' ; img-src 'self' data: http: https: ; style-src 'self' data: http: https: 'unsafe-inline' ; script-src 'self' data: http: https: 'unsafe-inline' 'unsafe-eval';";

Autre façon en autorisant les domaines en fonction des destinations comme par cette exemple ci dessous provenant de https://stackoverflow.com/questions/50260092/nginx-content-security-policy-header-still-blocking-bootstrapcdn

set $CSP_image  "img-src      'self' 'unsafe-inline' 'unsafe-eval' data: *.printfriendly.com *.w.org *.gravatar.com *.vimeocdn.com; ";
set $CSP_script "script-src   'self' 'unsafe-inline' 'unsafe-eval' *.w.org *.gravatar.com *.googleapis.com *.jsdelivr.net *.printfriendly.com *.kxcdn.com *.vimeocdn.com *.hs-analytics.net *.securitymetrics.com *.google-analytics.com; ";
set $CSP_style  "style-src    'self' 'unsafe-inline' *.googleapis.com *.bootstrapcdn.com *.gstatic.com *.vimeocdn.com; ";
set $CSP_font   "font-src     'self' data: *.googleapis.com *.bootstrapcdn.com *.gstatic.com *.googleapis.com; ";
set $CSP_frame  "frame-src    'self' *.vimeocdn.com *.vimeo.com; ";
set $CSP_object "object-src   'self' ; ";
set $CSP        "default-src  'self' ; ${CSP_image} ${CSP_script} ${CSP_style} ${CSP_font} ${CSP_frame} ${CSP_object}";

add_header Content-Security-Policy $CSP;

La partie que j’ai du mal a configurer, Content Security Policy est un mécanisme de sécurité permettant de restreindre l’origine du contenu tel qu’un script Javascript, des images, des CSS, etc…

Plus d’info: https://content-security-policy.com/ et https://www.kiwii.ch/fr/marketing-digital/securiser/verifier-securite-entetes-http/

 

 

Après les modifications, je rescan et finalement j’obtiens un A sur securityheaders et A+ sur ssllabs

 

 

Autres liens

https://blog.dareboost.com/fr/2017/09/hsts-fiabiliser-connexions-securisees/

https://memo-linux.com/securiser-son-site-web-sous-nginx-avec-lajout-den-tetes-headers/

 

 

No votes yet.
Please wait...

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.