Blog · SEO

En-têtes de sécurité : le rôle de chacun et comment les configurer

Une poignée d'en-têtes de réponse HTTP protège vos visiteurs contre le cross-site scripting, le clickjacking et les attaques par rétrogradation. Le rôle de chacun, des valeurs sûres pour démarrer, comment notre vérificateur gratuit d'en-têtes de sécurité teste votre site et comment corriger chaque problème signalé, sur nginx, Apache et Cloudflare.

Searvia · 24/10/2026 · Lecture : 14 min

Un technicien informatique verrouillant la porte vitrée d'une baie réseau dans une petite salle serveur

En bref : les en-têtes de sécurité sont des instructions que votre serveur envoie avec chaque page pour demander aux navigateurs de toujours utiliser HTTPS, de n'exécuter que les scripts provenant de sources approuvées, de refuser que d'autres sites affichent vos pages dans un cadre, de ne jamais deviner les types de fichiers et de ne pas exposer les URL complètes dans l'en-tête Referer. Commencez par HTTPS partout avec un certificat valide, puis ajoutez Strict-Transport-Security, X-Content-Type-Options: nosniff, Referrer-Policy: strict-origin-when-cross-origin et frame-ancestors ou X-Frame-Options. Déployez Content-Security-Policy d'abord en mode report-only. Tous se définissent dans la configuration du serveur ou du CDN.

Les en-têtes de sécurité sont une assurance peu coûteuse. La plupart tiennent en une ligne de configuration serveur, n'ont aucun coût en performance et ferment des familles entières d'attaques : un script injecté qui vole des sessions, un cadre invisible qui pousse à cliquer, un réseau de café qui rétrograde un visiteur en HTTP simple. Ce sont aussi parmi les premiers points vérifiés par les scanners de sécurité, les clients grands comptes et les questionnaires de sécurité.

Ce guide explique chaque en-tête et les bases de la connexion qui les entourent, donne des valeurs de départ sûres, montre comment notre vérificateur d'en-têtes de sécurité gratuit teste votre site, et détaille la correction de chaque problème signalé.

Les bases d'abord : HTTPS, certificat et contenu mixte

Les en-têtes s'appuient sur une connexion chiffrée ; sans elle, ils ne servent à rien. Trois bases passent en premier :

Les en-têtes, un par un

En-têteProtège contreValeur de départ sûre
Strict-Transport-SecurityRétrogradation vers HTTP, vol de cookies sur réseaux ouvertsmax-age=31536000; includeSubDomains (après test)
Content-Security-PolicyCross-site scripting (XSS), contenu injecté, clickjacking via frame-ancestorsCommencer par Content-Security-Policy-Report-Only
X-Frame-Options ou CSP frame-ancestorsClickjackingSAMEORIGIN ou frame-ancestors 'self'
X-Content-Type-OptionsMIME sniffing : fichiers exécutés comme scripts ou stylesnosniff
Referrer-PolicyFuite d'URL complètes vers d'autres sitesstrict-origin-when-cross-origin
Permissions-PolicyScripts intégrés utilisant caméra, micro, géolocalisationcamera=(), microphone=(), geolocation=()

Strict-Transport-Security (HSTS)

HSTS indique au navigateur d'utiliser HTTPS pour votre hôte pendant un nombre de secondes donné, même lorsque quelqu'un tape http:// ou clique sur un ancien lien. MDN signale trois points à connaître :

La liste HSTS preload inscrit votre domaine en dur dans les navigateurs. Elle exige un certificat valide, une redirection HTTP vers HTTPS sur le même hôte, tous les sous-domaines en HTTPS, et un en-tête avec max-age d'au moins 31536000, includeSubDomains et preload. Elle avertit aussi que « inclusion in the preload list cannot easily be undone » : un retrait met des mois à atteindre les utilisateurs. N'activez le preload que si vous êtes certain.

Content-Security-Policy (CSP)

La CSP est le plus puissant des en-têtes et le plus difficile à déployer. Elle liste les origines autorisées pour charger scripts, styles, images et autres ressources, et le navigateur refuse tout le reste. MDN la décrit principalement comme « a defense against cross-site scripting (XSS) attacks ».

La forme moderne recommandée est une CSP stricte fondée sur des nonces ou des hachages plutôt que sur de longues listes blanches de domaines :

Content-Security-Policy: script-src 'nonce-{RANDOM}'; object-src 'none'; base-uri 'none'

Le nonce doit être aléatoire et différent à chaque réponse. MDN prévient que 'unsafe-inline' « defeats much of the purpose of having a CSP ».

Comme une politique stricte peut casser des balises d'analytics, des widgets de chat et des scripts inline, déployez-la en deux étapes : envoyez Content-Security-Policy-Report-Only avec un point de collecte des rapports, corrigez ce que les rapports révèlent, puis passez à l'en-tête en mode application. C'est aussi dans la CSP que se trouve upgrade-insecure-requests (un filet de sécurité contre le contenu mixte, pas un remplacement de HSTS) et que frame-ancestors contrôle l'affichage en cadre.

X-Frame-Options et frame-ancestors

Le clickjacking charge votre page dans un cadre invisible sur un autre site et incite à cliquer sur vos boutons. Deux moyens de l'empêcher :

Aucun des deux ne fonctionne depuis une balise <meta>. MDN indique que X-Frame-Options dans un élément meta « has no effect » et que frame-ancestors « is not supported in the <meta> element ». Notez aussi que frame-ancestors ne retombe pas sur default-src : une politique default-src 'none' autorise quand même n'importe qui à afficher la page dans un cadre.

X-Content-Type-Options

nosniff demande aux navigateurs de faire confiance à votre en-tête Content-Type. Avec lui, une réponse demandée comme script ou feuille de style est bloquée si son type MIME ne correspond pas, ce qui empêche un fichier téléversé déguisé en image de s'exécuter comme script. Il n'a qu'une seule valeur valide :

X-Content-Type-Options: nosniff

Assurez-vous que votre serveur envoie les bons types de contenu, surtout pour JavaScript et CSS, avant de l'ajouter.

Referrer-Policy

Quand un visiteur clique sur un lien vers un autre site, le navigateur envoie un en-tête Referer. Les navigateurs modernes utilisent déjà par défaut strict-origin-when-cross-origin, qui n'envoie que l'origine (https://example.com/) entre sites et rien en passant de HTTPS à HTTP (MDN). OWASP recommande tout de même de le définir explicitement « rather than relying on browser defaults ». Évitez unsafe-url, qui envoie partout les URL complètes, jetons compris.

Permissions-Policy, et les en-têtes à supprimer

Permissions-Policy désactive les fonctionnalités du navigateur que vous n'utilisez pas, afin qu'un script intégré ne puisse pas demander la caméra ou la localisation. MDN la classe comme expérimentale avec un support navigateur limité : voyez-y une couche supplémentaire. Notre vérificateur gratuit ne la teste pas ; l'analyse de sécurité complète, si.

Deux en-têtes à retirer plutôt qu'à ajouter : OWASP déconseille de définir X-XSS-Protection (ou de le mettre à 0), car les anciens filtres qu'il contrôlait pouvaient créer des vulnérabilités, et juge Expect-CT obsolète. Il recommande aussi de supprimer X-Powered-By et de donner à Server une valeur non informative.

Comment fonctionne le vérificateur d'en-têtes de sécurité Searvia

Le vérificateur d'en-têtes de sécurité gratuit utilise le même moteur que notre vérificateur SEO de site web et place cinq contrôles en tête. Il effectue des requêtes ordinaires que n'importe quel visiteur pourrait faire ; rien n'est attaqué ni sondé.

ContrôleMéthode de testRéussiteAvertissementÉchecPriorité
HTTPSCharge la page en HTTPS, puis demande http:// sans suivre les redirectionsHTTPS fonctionne et HTTP redirige vers une adresse https:// (si HTTP ne répond pas du tout, vous obtenez une note à la place)HTTPS ne fonctionne pas, ou HTTP ne redirige pasHaute
Certificat TLSLit le certificat de l'hôte finalValide, correspond à l'hôte, 14 jours ou plus restantsMoins de 14 jours restantsExpiré ou ne couvre pas l'hôteHaute
HSTSLit max-age dans la réponse de la page15 552 000 secondes (environ 6 mois) ou plusAbsent ou plus courtBasse
Contenu mixteRepère les URL http:// dans les scripts, iframes, feuilles de style, images, vidéos, audios et sources d'une page HTTPSAucuneUniquement images ou médiasScripts, iframes ou feuilles de styleMoyenne
En-têtes de sécuritéRecherche trois en-têtes de réponse clés et affiche Referrer-PolicyLes trois sont présentsL'un d'eux manqueBasse

Les trois comptabilisés sont Content-Security-Policy, X-Frame-Options (ou un en-tête CSP contenant frame-ancestors) et X-Content-Type-Options. Referrer-Policy est aussi listé, mais son absence n'est pas retenue contre vous : les navigateurs utilisent déjà strict-origin-when-cross-origin par défaut, et le tableau le précise. Le tableau de résultats affiche la valeur de chacun, les longues politiques étant raccourcies.

Quelques limites à garder en tête :

Comment lire les résultats

Travaillez de haut en bas selon la priorité. Un échec du contrôle HTTPS ou du certificat est urgent : les visiteurs voient des avertissements du navigateur ou circulent sans chiffrement. Le contenu mixte actif (scripts, iframes, feuilles de style) vient ensuite, car les navigateurs bloquent ces fichiers et la page peut se casser. HSTS et les en-têtes de sécurité ont une priorité basse dans le score, mais ce sont aussi les plus rapides à corriger : regroupez-les dans une seule modification de configuration.

Comment corriger chaque problème signalé par le vérificateur

« The site does not work over HTTPS. » / « HTTP does not redirect to HTTPS. »

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

Sur Cloudflare, activez « Always Use HTTPS » sous SSL/TLS › Edge Certificates.

« The certificate expired N days ago. » / « The certificate does not cover this domain. »

Un avertissement avec moins de 14 jours restants signifie généralement que le renouvellement automatique ne fonctionne pas ; cherchez la cause plutôt que de renouveler à la main à chaque fois.

« HSTS is not set. » / « HSTS is on but shorter than 6 months. »

Déployez-le par étapes pour qu'un sous-domaine oublié, uniquement en HTTP, ne se retrouve pas bloqué :

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

« N files load over plain HTTP. »

« N key security headers are missing. »

Ajoutez les manquants en une seule modification. Pour nginx :

add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy-Report-Only "default-src 'self'; frame-ancestors 'self'; report-to csp" always;

Pour Apache :

Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"

Sur Cloudflare, ajoutez des en-têtes de réponse avec une Transform Rule. Sur Netlify, utilisez un fichier _headers ; sur Vercel, le paramètre headers de vercel.json. Dans nginx, rappelez-vous qu'un add_header dans un bloc location remplace les en-têtes définis au niveau du serveur : répétez-les ou utilisez un fichier d'inclusion.

Pour la CSP, la ligne report-only ci-dessus est un point de départ, pas une politique aboutie. Pointez report-to vers un point de collecte que vous contrôlez, examinez les violations pendant une à deux semaines, ajustez la politique, puis renommez l'en-tête en Content-Security-Policy. Une fois appliquée, le contrôle CSP passe.

Comment vérifier vous-même les en-têtes

Le vérificateur montre ce qu'envoie la page testée, mais d'autres pages, fichiers et réponses d'erreur peuvent différer. Deux moyens rapides de regarder :

Une surprise fréquente : des en-têtes présents sur les pages normales mais absents des erreurs ou des redirections. Dans nginx, add_header ne s'applique qu'aux réponses réussies et aux redirections, sauf si vous ajoutez le paramètre always, c'est pourquoi chaque exemple ci-dessus l'inclut. Autre piège : un CDN ou un hébergeur qui ajoute ou supprime des en-têtes ; vérifiez donc la réponse que voit le public, pas seulement votre fichier de configuration serveur.

Gardez en tête que chaque en-tête protège une chose différente. Une CSP parfaite ne change rien à un certificat expiré, et HSTS ne change rien face à un script injecté. L'objectif est l'ensemble complet, ajouté dans un ordre sensé.

Exemple pratique (hypothétique)

Ce qui suit est un exemple hypothétique, pas des données réelles. Halden Legal, un cabinet d'avocats fictif, reçoit d'un client grand compte un questionnaire de sécurité portant sur les en-têtes de son site. Le vérificateur d'en-têtes de sécurité indique :

Les corrections prennent un après-midi. Les deux URL d'images passent en HTTPS. Après avoir confirmé que le sous-domaine du portail client fonctionne en HTTPS, HSTS passe à max-age=31536000; includeSubDomains en deux étapes sur une semaine. X-Frame-Options: SAMEORIGIN et Referrer-Policy: strict-origin-when-cross-origin sont ajoutés au niveau du serveur. Une CSP en report-only tourne pendant dix jours et révèle un script inline du widget de réservation, déplacé dans un fichier et autorisé par son origine avant l'application de la politique. La dernière analyse passe tous les contrôles, et le cabinet répond au questionnaire avec un lien vers le rapport partagé.

Une checklist d'une heure

Comment Searvia surveille la sécurité de votre site

Le vérificateur d'en-têtes de sécurité gratuit analyse votre page d'accueil, ou n'importe quelle page saisie, en environ 20 secondes, sans inscription, et le même rapport couvre 33 contrôles supplémentaires sur l'apparence dans les résultats de recherche, le crawl, la vitesse, le mobile et l'authentification des e-mails.

Un compte Searvia gratuit ajoute une analyse de sécurité hebdomadaire : contrôles passifs du chiffrement, des protections du navigateur, des attributs de cookies, des versions de logiciels et de la protection contre l'usurpation d'e-mail, avec la requête et la réponse qui prouvent chaque constat. Elle note votre CSP (par exemple 'unsafe-inline' sans nonces ni hachages), vérifie Permissions-Policy et, une fois que vous avez vérifié la propriété, recherche aussi des fichiers .env et .git exposés, des sauvegardes publiques, des pages de debug et du CORS non sécurisé. Write the remediation plan with AI transforme les constats en configuration à copier-coller (5 crédits). Sur les offres payantes à partir de Starter, la surveillance de disponibilité vérifie aussi chaque jour votre certificat TLS et vous alerte avant son expiration.

Questions fréquentes

Que sont les en-têtes de sécurité ?
Les en-têtes de sécurité sont des en-têtes de réponse HTTP qui indiquent au navigateur comment traiter votre page de façon plus sûre : toujours utiliser HTTPS (Strict-Transport-Security), n'exécuter que les scripts provenant de sources approuvées (Content-Security-Policy), interdire l'affichage en cadre par d'autres sites (X-Frame-Options ou frame-ancestors), ne pas deviner les types de fichiers (X-Content-Type-Options) et limiter ce qui est envoyé dans l'en-tête Referer (Referrer-Policy). Ils se définissent sur le serveur ou le CDN, pas dans le contenu de votre page.
Les en-têtes de sécurité influencent-ils le SEO ?
Pas comme facteurs de classement individuels. Les recommandations de Google sur l'expérience de page demandent si les pages sont servies de façon sécurisée : HTTPS compte donc, et un HTTPS défaillant ou du contenu mixte nuit aux visiteurs et à la confiance. Des en-têtes comme Content-Security-Policy et X-Frame-Options protègent les utilisateurs contre les attaques ; leur valeur est la sécurité, pas le classement.
Quel est un bon max-age pour HSTS ?
Un an (max-age=31536000) est un choix courant et le minimum pour la liste HSTS preload, qui exige aussi includeSubDomains et preload. Commencez plus bas, par exemple quelques minutes, puis une semaine, puis un mois, le temps de confirmer que chaque sous-domaine fonctionne en HTTPS, car les navigateurs refuseront le HTTP simple pendant toute la durée. Notre vérificateur valide les valeurs d'environ six mois ou plus.
Faut-il utiliser X-Frame-Options ou frame-ancestors ?
Les deux conviennent ; frame-ancestors dans Content-Security-Policy est l'option moderne la plus flexible et X-Frame-Options est l'ancien repli. Utilisez frame-ancestors 'self' ou X-Frame-Options: SAMEORIGIN si vous n'avez jamais besoin que vos pages soient intégrées ailleurs. Aucun des deux ne fonctionne dans une balise meta ; ils doivent être envoyés comme en-têtes HTTP.
X-XSS-Protection est-il encore nécessaire ?
Non. OWASP recommande de ne pas le définir ou de le désactiver explicitement avec X-XSS-Protection: 0, car les anciens filtres XSS des navigateurs qu'il contrôlait pouvaient introduire des vulnérabilités. Utilisez plutôt une Content-Security-Policy qui bloque les scripts inline.

Sources

  1. HTTP Security Response Headers Cheat Sheet – OWASP
  2. Strict-Transport-Security – MDN Web Docs
  3. HSTS Preload List Submission – hstspreload.org
  4. Content Security Policy (CSP) – MDN Web Docs
  5. CSP: frame-ancestors – MDN Web Docs
  6. X-Frame-Options – MDN Web Docs
  7. X-Content-Type-Options – MDN Web Docs
  8. Referrer-Policy – MDN Web Docs
  9. Permissions-Policy – MDN Web Docs
  10. Mixed content – MDN Web Docs
  11. Understanding page experience in Google Search results – Google Search Central
  12. Module ngx_http_headers_module – nginx documentation
  13. A secure web is here to stay – Chromium Blog

Continuer la lecture