Lorsqu’un utilisateur visite votre site web, de nombreuses données sont échangées « en coulisses » entre le navigateur de l’utilisateur et le serveur web qui héberge votre site web, y compris les en-têtes HTTP (généralement une « demande » du navigateur de l’utilisateur et une « réponse » du serveur web).
Parmi les différents types d’en-têtes de réponse, il existe 10 en-têtes (recommandés par l’OWASP) appelés en-têtes HTTP de sécurité, spécialement conçus pour contrer les différentes menaces utilisées par les pirates et les attaquants, qui peuvent envoyer des données falsifiées en utilisant différents outils (même un navigateur web), pour exploiter les vulnérabilités de votre site web (« cross-site scripting », injection SQL, reniflage de type MIME, et autres).
1) HTTP Strict Transport Security (HSTS)
Le protocole HTTP (HyperText Transfer Protocol), est le protocole à l’origine du réseau Internet.
Contrairement à la version HTTP où les données sont transmises « en clair », le HTTPS (HyperText Transfer Protocol over Secure Socket Layer) utilise le cryptage des données (certificat SSL), afin d’éviter que les données ne soient interceptées et lues par des utilisateurs malveillants.
Quels sont les risques ?
L’installation d’un certificat SSL sur votre site ne suffit pas à vous protéger contre les attaques. Vous devez mettre en place un en-tête HSTS pour protéger totalement votre site et vos utilisateurs.
Un exemple typique est celui d’un site de banque en ligne qui n’a pas configuré l’en-tête HSTS, auquel un utilisateur se connecte via le réseau Wi-Fi d’un aéroport, pour vérifier le solde de son compte bancaire et peut-être payer quelques factures, sans savoir que le point d’accès au réseau Wi-Fi est en fait l’ordinateur portable d’un pirate qui a cloné le site de la banque, et qui est capable d’intercepter la demande de connexion de l’utilisateur en lui volant ses identifiants d’accès au site de la banque. Ce type d’attaque est appelé « attaque de l’homme du milieu ».
Comment puis-je protéger mon site et mes visiteurs ?
Pour éviter ce type d’attaque, il suffit de configurer l’en-tête HSTS sur votre serveur.
De cette façon, les navigateurs des utilisateurs seront obligés d’utiliser uniquement le protocole HTTPS crypté.
Pour vérifier si cet en-tête a été configuré sur votre site ou non, vous pouvez utiliser le scanner Netsparker à l’adresse suivante : https://securityheaders.com
Dans la page de résultats, les en-têtes de votre site seront signalés en vert, ceux qui manquent en rouge.
Si cela n’a pas été configuré, ajoutez les directives suivantes dans le fichier de configuration du serveur.
ATTENTION: Si votre site n’a pas de certificat SSL, avant d’ajouter cet en-tête, installez un certificat SSL.
Apache
Ajoutez au fichier .htaccess dans le répertoire racine de votre site
Nginx
Ajouter au fichier de configuration de Nginx
2) Public Key Pinning (HPKP)
L’en-tête Public Key Pinning permet d’associer un certificat SSL à une autorité de certification racine spécifique, à une autorité de certification intermédiaire ou à une clé publique.
Cela protège contre l’émission non autorisée de certificats qui permettrait à un attaquant d’utiliser des techniques d’homme du milieu pour voler des références d’accès et d’autres données confidentielles.
Quels sont les risques ?
Le principal risque est que l’autorité de certification, qui a émis les certificats installés sur votre site web, soit piratée et que des certificats frauduleux soient émis pour remplacer les certificats authentiques existants. De cette manière, le trafic légitime serait détourné vers des systèmes appartenant à l’utilisateur malveillant, ce qui entraînerait le vol d’identifiants d’accès et de données confidentielles.
Comment puis-je protéger mon site et mes visiteurs ?
Vu que la mise en œuvre de cet en-tête est assez délicate et compliquée, il est conseillé de ne le mettre en place que sur les systèmes critiques (banque en ligne, commerce électronique).
Au cas où vous voudriez le configurer sur votre propre serveur, nous vous suggérons de suivre les instructions fournies par Scott Helme dans son article « HPKP : HTTP Public Key Pinning » à l’adresse suivante : https://scotthelme.co.uk/hpkp-http-public-key-pinning/
Pour vérifier si cet en-tête a été mis en place ou non sur votre site, utilisez le scanner de l’Observatoire de Mozilla à l’adresse : https://observatory.mozilla.org
Sur la page des résultats, les en-têtes de votre site seront marqués d’une coche verte, ceux qui manquent d’une croix rouge.
3) X-Frame-Options (XFO)
L’en-tête X-Frame-Options (également appelé XFO) permet de protéger les visiteurs d’un site web contre la technique du détournement de clic (« clickjacking »). Cette technique, assez simple à mettre en place, permet de rediriger les utilisateurs vers un contenu différent de celui choisi par l’utilisateur lorsqu’il clique sur un lien de votre site, contenu qui reste invisible pour l’utilisateur final (grâce à l’utilisation de structures appelées iframes, rendues invisibles grâce au code CSS).
Grâce à cette technique, il est possible de voler des informations confidentielles, telles que les identifiants d’accès à des sites de banque en ligne, les numéros de cartes de crédit ou autres.
Comment puis-je vérifier s’il y a des iframes sur mon site ?
Pour vérifier s’il y a ou non des iframes sur votre site, vous pouvez utiliser le scanner fourni par Sucuri à l’adresse suivante : https://sitecheck.sucuri.net
Après avoir scanné, en haut, cliquez sur l’élément « Plus de détails » puis dans la fenêtre affichée, en bas, cliquez sur le lien « iframes inclus ».
Comment puis-je protéger mon site et mes visiteurs ?
Pour protéger votre site web, vous pouvez configurer un en-tête X-Frame-Options.
Pour vérifier si cet en-tête a été configuré sur votre site ou non, vous pouvez utiliser le scanner Netsparker à l’adresse suivante : https://securityheaders.com
Dans la page de résultats, les en-têtes de votre site seront signalés en vert, ceux qui manquent en rouge.
Si cela n’a pas été configuré, ajoutez les directives suivantes dans le fichier de configuration du serveur.
Apache
Ajoutez au fichier .htaccess dans le répertoire racine de votre site
Nginx
Ajouter au fichier de configuration de Nginx
4) X-XSS-Protection (XSS)
XSS signifie « cross-site scripting » et c’est un type de vulnérabilité des applications Web. Dans le classement « OWASP Top Ten », en termes d’importance, ce type de vulnérabilité se classe deuxième après les injections SQL.
Le « cross-site scripting » permet de pirater une application web vulnérable (généralement un site web dynamique) en y insérant un code malveillant, qui est ensuite exécuté par le navigateur de l’utilisateur lorsqu’il visite le site web piraté l’infection se produisant à l’insu de l’utilisateur lui-même.
Ensuite, dans le cas où l’utilisateur dispose d’un accès privilégié à l’application (rôle administrateur), le pirate pourrait prendre pleinement possession du système et des données disponibles sur le site web piraté.
Comment puis-je vérifier s’il y a des vulnérabilités XSS sur mon site ?
Il existe plusieurs outils pour vérifier s’il y a des vulnérabilités de type XSS sur votre site web, certains sont gratuits, mais la plupart sont des solutions payantes.
Outils gratuits
Scan My Server
Ce service permet d’effectuer une analyse approfondie des vulnérabilités d’injection XSS et SQL, totalement gratuite, avec toutefois la limitation d’une seule analyse par semaine.
Pour tester le service, créez un compte à l’adresse :
https://scanmyserver.com/registration.html
Sélectionnez le forfait « Gratuit ».
À la fin de l’inscription, il vous sera demandé d’insérer un extrait de code dans le pied de page de votre site web, afin de vérifier que vous êtes bien le propriétaire du site que vous allez évaluer.
Pentest-tools
XSS Scanner (ZAP OWASP)
Ce service utilise le scanner Opensource ZAP (OWASP). Le mode gratuit fournit un scan de seulement 20 url, pour une durée totale de 2 minutes seulement.
Pour obtenir un scan plus approfondi (500 url et une durée de 30 minutes), vous devez vous inscrire et payer 45 Euro/mois ou 250 Euro par année.
Qualys FreeScan Community Edition
https://www.qualys.com/community-edition/#/freescan
Outils payants
- Detectify (https://detectify.com/)
- Acunetix (https://www.acunetix.com/vulnerability-scanner/free-website-vulnerability-scanner-online/)
- Swascan (https://www.swascan.com/it/#vulnerability-assessment)
- Netsparker (https://www.netsparker.com/online-web-application-security-scanner/)
Comment puis-je protéger mon site et mes visiteurs ?
La meilleure protection contre les attaques XSS est le paramétrage correct de la validation, le nettoyage des données et l’échappement fournis par le langage de programmation utilisé pour construire l’application web.
Pour plus d’informations, veuillez vous référer aux directives de l’OWASP :
1) XSS par réflexion et par stockage
https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html
2) XSS par injection DOM
https://cheatsheetseries.owasp.org/cheatsheets/DOM_based_XSS_Prevention_Cheat_Sheet.html
Pour protéger votre site contre les attaques XSS, il est conseillé de mettre en place l’en-tête X-XSS-security.
ATTENTION : L’en-tête X-XSS-Protection protège uniquement contre les vulnérabilités XSS par réflexion
Pour vérifier si cet en-tête a été configuré sur votre site ou non, vous pouvez utiliser le scanner Netsparker à l’adresse suivante : https://securityheaders.com
Dans la page de résultats, les en-têtes de votre site seront signalés en vert, ceux qui manquent en rouge.
Si cela n’a pas été configuré, ajoutez les directives suivantes dans le fichier de configuration du serveur.
Apache
Ajoutez au fichier .htaccess dans le répertoire racine de votre site
Nginx
Ajouter au fichier de configuration de Nginx
5) X-Content-Type-Options (XCTO)
L’en-tête XCTO a été introduit par Microsoft dans la version 8 du navigateur Internet Explorer.
Lorsqu’il est activé, il précise que les types MIME publiés dans l’en-tête « Content-Type » doivent être respectés et ne peuvent pas être modifiés.
Quels sont les risques ?
En configurant l’en-tête « Content-Type-Options », le serveur est protégé contre les tentatives de reniflage des types MIME, une technique qui permet de transformer un type MIME non exécutable en un type exécutable, mettant ainsi en péril la sécurité du système.
Comment puis-je protéger mon site et mes visiteurs ?
Pour protéger votre site web contre ce type de menace, l’en-tête « Content-Type-Options » doit être configuré avec le paramètre « nosniff ».
Pour vérifier si cet en-tête a été configuré sur votre site ou non, vous pouvez utiliser le scanner Netsparker à l’adresse suivante : https://securityheaders.com
Dans la page de résultats, les en-têtes de votre site seront signalés en vert, ceux qui manquent en rouge.
Si cela n’a pas été configuré, ajoutez les directives suivantes dans le fichier de configuration du serveur.
Apache
Ajoutez au fichier .htaccess dans le répertoire racine de votre site
Nginx
Ajouter au fichier de configuration de Nginx
6) Content-Security-Policy (CSP)
Grâce à l’en-tête « Content-Security-Policy », vous pouvez définir de façon granulaire la source de chaque contenu (police, javascript, feuilles de style, etc.) de votre site web, éléments qui seront ensuite téléchargés par le navigateur du visiteur du site.
Quels sont les risques ?
Le risque le plus important est que des scripts malveillants soient introduits par un attaquant dans la page principale du site, qui sont ensuite téléchargés par le navigateur du visiteur, à son insu.
Comment puis-je protéger mon site et mes visiteurs ?
L’en-tête « Content-Security-Policy » fournit un certain nombre de paramètres permettant de définir avec précision les sources du contenu de votre site.
C’est pourquoi la mise en œuvre d’une politique correcte, peut prendre beaucoup de temps et d’efforts, et peut même casser votre site web (erreur 500: Erreur interne du serveur) qui peut être facilement récupérée en désactivant l’en-tête.
La politique indiquée ci-dessous, est un modèle de base qui devrait fonctionner pour la plupart des sites web.
En cas d’erreur, vous devez désactiver temporairement l’en-tête et vérifier avec l’outil CSP Evaluator (Google) les erreurs de configuration ou les incompatibilités.
Pour vérifier si cet en-tête a été configuré sur votre site ou non, vous pouvez utiliser le scanner Netsparker à l’adresse suivante : https://securityheaders.com
Dans la page de résultats, les en-têtes de votre site seront signalés en vert, ceux qui manquent en rouge.
Si cela n’a pas été configuré, ajoutez les directives suivantes dans le fichier de configuration du serveur.
Apache
Ajoutez au fichier .htaccess dans le répertoire racine de votre site
Nginx
Ajouter au fichier de configuration de Nginx
7) X-Permitted-Cross-Domain-Policy (XPCDP)
Des logiciels tels qu’Adobe Acrobat ou Flash utilisent un concept de même origine, qui peut parfois permettre d’accéder à des domaines autres que celui d’origine.
Quels sont les risques ?
Si l’en-tête XPCDP n’est pas configuré dans votre site web, le contenu pourrait être utilisé à des fins illicites par des utilisateurs malveillants.
Comment puis-je protéger mon site et mes visiteurs ?
Pour protéger le contenu de votre site, ajoutez l’en-tête XPCDP au fichier de configuration de votre serveur web.
Pour vérifier si cet en-tête a été configuré sur votre site ou non, vous pouvez utiliser le scanner Netsparker à l’adresse suivante : https://securityheaders.com
Dans la page de résultats, les en-têtes de votre site seront signalés en vert, ceux qui manquent en rouge.
Si cela n’a pas été configuré, ajoutez les directives suivantes dans le fichier de configuration du serveur.
Apache
Ajoutez au fichier .htaccess dans le répertoire racine de votre site
Nginx
Ajouter au fichier de configuration de Nginx
8) Referrer Policy (RP)
Lorsqu’un visiteur clique sur un lien disponible sur votre site web, et que cela l’amène à visiter un site web externe, les en-têtes du navigateur de l’utilisateur transmettront l’adresse d’origine, c’est-à-dire l’adresse de votre site web.
Comment puis-je protéger mon site et mes visiteurs ?
Cette politique offre de nombreuses possibilités pour choisir celle qui vous convient le mieux.
Dans l’exemple ci-dessous, l’option sélectionnée « no referrer ».
Pour vérifier si cet en-tête a été configuré sur votre site ou non, vous pouvez utiliser le scanner Netsparker à l’adresse suivante : https://securityheaders.com
Dans la page de résultats, les en-têtes de votre site seront signalés en vert, ceux qui manquent en rouge.
Si cela n’a pas été configuré, ajoutez les directives suivantes dans le fichier de configuration du serveur.
Apache
Ajoutez au fichier .htaccess dans le répertoire racine de votre site
Nginx
Ajouter au fichier de configuration de Nginx
9) Expect-CT (ECT)
L’en-tête « Expect-CT » est un nouvel en-tête proposé par Google, pour résoudre certains problèmes liés au protocole SSL/TLS.
Comment puis-je protéger mon site et mes visiteurs ?
Si vous utilisez un service CDN (par exemple Cloudflare), l’en-tête ECT est automatiquement défini par le service CDN.
Si vous souhaitez le configurer, il suffit de l’ajouter au fichier de configuration de votre serveur web.
Pour vérifier si cet en-tête a été configuré sur votre site ou non, vous pouvez utiliser le scanner Netsparker à l’adresse suivante : https://securityheaders.com
Dans la page de résultats, les en-têtes de votre site seront signalés en vert, ceux qui manquent en rouge.
Si cela n’a pas été configuré, ajoutez les directives suivantes dans le fichier de configuration du serveur.
Apache
Ajoutez au fichier .htaccess dans le répertoire racine de votre site
Nginx
Ajouter au fichier de configuration de Nginx
10) Feature-Policy (FP)
« Feature-Policy header », est un nouvel en-tête (publié en 2018) qui permet d’activer ou de désactiver de manière très granulaire, les fonctionnalités du navigateur de l’utilisateur.
Comment puis-je protéger mon site et mes visiteurs ?
L’en-tête FP offre de nombreuses options pour configurer en détail les fonctionnalités autorisées et non autorisées.
La politique présentée dans l’exemple ci-dessous est une politique de base qui devrait fonctionner pour la plupart des sites web.
Pour vérifier si cet en-tête a été configuré sur votre site ou non, vous pouvez utiliser le scanner Netsparker à l’adresse suivante : https://securityheaders.com
Dans la page de résultats, les en-têtes de votre site seront signalés en vert, ceux qui manquent en rouge.
Si cela n’a pas été configuré, ajoutez les directives suivantes dans le fichier de configuration du serveur.
Apache
Ajoutez au fichier .htaccess dans le répertoire racine de votre site
Nginx
Ajouter au fichier de configuration de Nginx
En bref
Vous pouvez configurer tous les en-têtes dans un seul bloc, en utilisant l’exemple suivant :
Apache
Ajoutez au fichier .htaccess dans le répertoire racine de votre site
Nginx
Ajouter au fichier de configuration de Nginx
ATTENTION: Avant d’ajouter ces règles à la configuration de votre serveur, je vous suggère de désactiver toutes les règles en les commentant (en mettant un signe # au début de chaque règle) puis de les activer une à la fois, en vérifiant à chaque fois si votre site fonctionne ou non.
En cas d’erreur (erreur 500), il suffit de désactiver la règle qui pose des problème.
Une réponse
Il manque juste :
– Header always set Content-Security-Policy « upgrade-insecure-requests; »
et c’est parfait pour les « en-tête de sécurité » préconisées par WordPress 🙂
Merci pour cet article très utile, cela évite de prendre la version pro de Simple SSL !