Retour au blog

Blog · Sécurité & confiance

Les en-têtes de sécurité HTTP, expliqués sans jargon

En bref Les en-têtes de sécurité sont des instructions que votre serveur envoie au navigateur avant votre page. Ils lui disent ce qu'il a le droit de faire. Six d'entre eux comptent vraiment, ils se posent tous au même endroit, et une intervention d'une heure les traite en bloc. C'est le meilleur rapport entre l'effort fourni et les points gagnés dans un audit, et pourtant la catégorie où les sites de PME obtiennent les scores les plus bas.

Ce qu'est un en-tête, en une image

Quand un visiteur ouvre votre site, votre serveur ne renvoie pas seulement la page. Il renvoie d'abord une liste d'instructions destinées au navigateur : le type de contenu, la langue, la durée de mise en cache, et éventuellement des consignes de sécurité.

Imaginez un colis. La page est le contenu, les en-têtes sont ce qui est écrit sur l'étiquette : fragile, ne pas ouvrir, à livrer en main propre. Un colis sans étiquette arrive quand même, mais le transporteur fait ce qu'il veut.

Un site sans en-têtes de sécurité fonctionne parfaitement. Il laisse simplement le navigateur décider seul, et le navigateur, par défaut, est permissif.

Les six qui comptent, et ce que chacun empêche

Content-Security-Policy. Le plus important et le plus exigeant. Il liste les sources autorisées à charger du code sur votre page. Sans lui, un script injecté par une faille de commentaire ou par une extension compromise s'exécute comme s'il venait de vous, et peut lire ce que vos visiteurs saisissent dans vos formulaires. Il demande un réglage soigneux : posé trop strictement, il casse des fonctionnalités du site.

Strict-Transport-Security. Il dit au navigateur : pour ce domaine, n'accepte plus jamais une connexion non chiffrée, même si on te le demande. Il ferme la fenêtre pendant laquelle un visiteur sur un réseau public peut être détourné vers une copie de votre site. Un en-tête, une ligne, aucun effet de bord une fois le HTTPS en place partout.

X-Frame-Options. Il empêche qu'on affiche votre site dans un cadre invisible sur une autre page, technique utilisée pour faire cliquer un visiteur sur un bouton qu'il ne voit pas. Concrètement, il protège vos formulaires et vos boutons d'action.

X-Content-Type-Options. Une seule valeur possible, nosniff. Il interdit au navigateur de deviner le type d'un fichier. Sans lui, une image piégée téléversée par un visiteur peut être interprétée comme du code.

Referrer-Policy. Il contrôle ce que votre site raconte aux autres. Sans lui, un visiteur qui quitte une page d'espace client emmène l'adresse complète de cette page, paramètres compris, vers le site suivant. C'est un sujet de confidentialité autant que de sécurité.

Permissions-Policy. Il déclare quelles capacités du navigateur votre site n'utilise pas : caméra, micro, géolocalisation, paiement. Déclarer qu'on n'en a pas besoin est plus fort que de ne rien dire.

Le cas des cookies, souvent oublié

Un cookie mal configuré annule une partie du travail précédent. Trois attributs sont à poser systématiquement :

  • Secure : le cookie n'est jamais transmis en clair.
  • HttpOnly : aucun script ne peut le lire, ce qui protège une session même si un script hostile s'exécute.
  • SameSite : le cookie n'est pas envoyé quand la requête vient d'un autre site, ce qui bloque une action déclenchée à l'insu du visiteur.

C'est un réglage de trois mots dans la configuration, et il concerne aussi les cookies posés par vos outils de mesure d'audience, sujet que nous traitons dans l'article sur les cookies et les traceurs.

Comment les poser, selon votre hébergement

Le principe est le même partout : ces en-têtes se déclarent une fois, dans la configuration du serveur, et s'appliquent à toutes les pages. Vous ne touchez pas au contenu de votre site.

  • Hébergement mutualisé classique : un fichier de configuration à la racine, quelques lignes à ajouter. Votre hébergeur documente la procédure.
  • WordPress : une extension de sécurité les pose, ou le fichier de configuration du serveur si vous y avez accès. Préférez le serveur quand c'est possible, une extension de moins est une dépendance de moins.
  • Serveur dédié ou machine virtuelle : la configuration de nginx ou d'Apache, un bloc unique.

Un conseil d'ordre : posez d'abord les cinq en-têtes simples, qui n'ont aucun effet de bord. Gardez Content-Security-Policy pour la fin, testez-le sur une page avant de le généraliser, et vérifiez que rien ne casse.

Ce que nous mesurons, et ce que nous refusons de mesurer

Notre audit lit seize points dans cette catégorie : les six en-têtes ci-dessus, la solidité réelle de la politique de sécurité du contenu lorsqu'elle existe, les attributs de vos cookies, l'intégrité des ressources chargées depuis d'autres domaines, le point de contact de sécurité, l'isolation entre origines, et la présence d'un pare-feu applicatif.

Ce que nous ne faisons pas, volontairement : aucun scan de ports, aucune sonde intrusive, aucune tentative d'exploitation. Nous ne mesurons que ce que n'importe quel visiteur ou robot légitime voit en arrivant sur votre site. C'est une position de principe, expliquée dans notre méthodologie, et c'est aussi ce qui rend chaque constat vérifiable par votre prestataire sans nous croire sur parole.

Pour la suite des chantiers, le guide de la sécurité d'un site donne l'ordre de priorité.

Vos en-têtes sont-ils en place ?

L'audit lit les 16 points d'en-têtes de sécurité de votre site et vous donne la valeur exacte à poser. Gratuit, 30 secondes.

Analyser mon site