Vous souhaitez protéger au mieux votre site Web contre les attaques les plus courantes comme le cross-site scripting et le clickjacking? Nous vous recommandons alors d’utiliser les en-têtes de sécurité http. Dans cet article, nous vous montrons comment fonctionnent ces en-têtes et comment les intégrer à votre site Web.
Introduction
Lorsque vous consultez un site Web spécifique avec votre navigateur, le serveur responsable envoie non seulement le contenu de la page à votre appareil, mais également différentes métadonnées relatives au site Web. Les en-têtes de sécurité HTTP font partie de ces métadonnées. Ils indiquent au navigateur de l’internaute comment il doit afficher le site Web.
Les en-têtes de sécurité permettent de mieux protéger un site Web contre différents types d’attaques, ce qui renforce la sécurité.
Types d’en-têtes de sécurité
Il existe toute une série d’en-têtes de sécurité différents. Chaque en-tête est conçu pour un type d’attaque spécifique. Nous vous présentons ci-dessous les en-têtes les plus importants en matière de sécurité.
Content-Security-Policy (CSP)
Cet en-tête définit les contenus dynamiques (p. ex. JavaScript, images, CSS) qui peuvent être chargés sur votre site Web et de quelle URL ils peuvent provenir. La Content Security Policy (politique de sécurité des contenus) sert à prévenir les attaques de cross-site scripting (XSS), qui consistent à exécuter du code dangereux ou malveillant sur un site Web.
La Content Security Policy suivante stipule que seuls les contenus provenant du même serveur que le site Web lui-même peuvent être chargés:
Content-Security-Policy: default-src 'self'
X-Content-Type-Options
Cet en-tête détermine si le navigateur peut deviner automatiquement ou non les formats de fichiers lorsque le serveur de votre site Web ne les spécifie pas explicitement. En définissant cet en-tête, vous empêchez le navigateur d’interpréter des formats de fichiers inattendus et potentiellement dangereux.
La règle suivante stipule que les formats de fichier ne doivent pas être devinés:
X-Content-Type-Options: nosniff
Referrer-Policy
Cet en-tête définit les informations relatives à l’origine d’une requête transmise depuis votre site Web. Lorsqu’un lien sortant figure sur votre site Web, le site Web cible enregistre par défaut votre domaine comme origine de la requête. La referrer policy (politique de référence) vous permet de contrôler les informations transmises à des serveurs externes. Cet en-tête sert donc en premier lieu à la protection des données.
La règle suivante permet de ne transmettre aucune information sur l’origine d’une requête:
Referrer-Policy: no-referrer
HTTP Strict-Transport-Security (HSTS)
Cet en-tête indique au navigateur que votre site Web ne peut être consulté que via une connexion cryptée (HTTPS). Cela empêche l’interception des communications entre le navigateur et le serveur.
La règle suivante stipule que votre site Web, y compris tous les sous-domaines, ne doit être consulté qu’avec HTTPS. La règle s’applique pendant un an (31 536 000 secondes) et le domaine est inscrit dans la liste de préchargement (voir section Inscrire la page dans la liste de préchargement).
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
X-Frame-Options
Cet en-tête empêche les pages de votre site Web d’être chargées sous forme d’iFrames sur un autre site Web. Cela prévient les attaques dites de clickjacking, qui consistent à intégrer votre contenu dans un site Web malveillant.
La règle suivante stipule que votre contenu ne peut être intégré que sur les pages de votre site Web:
X-Frame-Options: SAMEORIGIN
Permissions-Policy
Cet en-tête vous permet de définir l’accès à certaines fonctions et API de votre site Web. Cela comprend par exemple l’utilisation de l’appareil photo (camera
) ou du microphone (microphone
), l’affichage plein écran (fullscreen
) ou la récupération de votre localisation (geolocation
). Cela permet d’éviter les attaques comme le XSS et le clickjacking, tout en renforçant la sécurité des données de vos visiteurs.
La Permissions Policy (politique d’autorisation) est toujours structurée selon le modèle suivant:
Permissions-Policy: <directive>=(<allowlist>), <directive>=(<allowlist>)
Ajouter les en-têtes de sécurité à son site Web
Intégrer les en-têtes de sécurité
Les en-têtes de sécurité HTTP sont intégrés via le fichier .htaccess. Si vous utilisez un CMS comme WordPress, vous pouvez utiliser un plugin (p. ex. Yoast SEO, w3 Total Cache). Vous pouvez également modifier le fichier directement, p. ex. via l’Explorer dans le Control Panel Hostpoint ou via une connexion FTP ou SSH.
Insérez ensuite vos en-têtes de sécurité HTTP dans le fichier selon la structure suivante:
<IfModule mod_headers.c>
Header set [nom et valeur de l’en-tête]
</IfModule>
L’exemple suivant montre les en-têtes de sécurité d’un site Web WordPress:
<IfModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" env=HTTPS
Header set X-Content-Type-Options nosniff
Header set X-Frame-Options DENY
Header set Referrer-Policy no-referrer
Header set Content-Security-Policy "base-uri 'self';form-action 'self';frame-ancestors 'self';font-src 'self';"
</IfModule>
Outils de contrôle
Les outils suivants vous permettent d’afficher les en-têtes de sécurité de votre site Web:
- Webbkoll: https://webbkoll.5july.net/en
- Security Headers by Snyk: https://securityheaders.com/
Inscrire la page dans la liste de préchargement
Si vous avez ajouté l’en-tête HTTP Strict Transport Security (HSTS), nous vous recommandons d’ajouter également votre site Web à la liste de préchargement. Vous vous assurez ainsi que toutes les communications avec votre site Web sont cryptées dès le premier accès.
La liste de préchargement, gérée par Google Chrome, est utilisée par la plupart des grands navigateurs Web (p. ex. Firefox, Edge, Safari). L’inscription est gratuite.
Informations complémentaires
Vous trouverez d’autres informations utiles sur ce thème sur les sites suivants:
- https://fr.wikipedia.org/wiki/HTTP_Strict_Transport_Security
- https://developer.mozilla.org/fr/docs/Web/HTTP/Reference/Headers
Pour envoyer une demande d'assistance au support, merci d'utiliser ce formulaire-ci.