Headers HTTP de sécurité : 7 réglages qui bloquent 80% des attaques web (configs 2026)
En bref : les headers HTTP de sécurité sont une défense passive contre 80 % des attaques web automatisées (XSS, clickjacking, sniffing, injection de contenu). Leur configuration prend 30 minutes. Leur absence est un motif d'affaiblissement en cas de contrôle CNIL suite à une fuite. Voici les 7 headers essentiels, leur rôle, et comment les activer sur Apache, Nginx et cPanel.
Pourquoi les headers HTTP sont critiques
Les headers HTTP de sécurité sont des instructions que votre serveur envoie au navigateur à chaque réponse. Ils disent au navigateur : « Fais confiance à X, refuse Y, bloque Z ». Cela crée une couche de protection supplémentaire entre le navigateur et votre site.
Concrètement, sans ces headers :
- Votre site peut être intégré dans une iframe frauduleuse (clickjacking) et voler des clics de vos utilisateurs.
- Un script injecté via XSS peut voler les cookies de session de vos utilisateurs.
- Un visiteur peut tomber sur du HTTP en clair si un attaquant exploite une faille DNS.
- Votre politique CSP absente laisse passer tout script externe, même malveillant.
Et en cas de fuite de données, la CNIL examine vos headers. Leur absence = négligence = amende alourdie.
Les 7 headers essentiels (par ordre de priorité)
1. Strict-Transport-Security (HSTS) Facile
Rôle : force le navigateur à utiliser HTTPS pour toutes les futures requêtes vers votre domaine, empêchant le downgrade vers HTTP.
Configuration recommandée :
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Effet : une fois qu'un navigateur a vu ce header, il refusera pendant 1 an toute tentative de connexion HTTP vers votre domaine.
2. X-Content-Type-Options Facile
Rôle : empêche le navigateur de « deviner » le type MIME d'un fichier. Par exemple, un fichier uploadé en .jpg mais contenant du JavaScript ne sera pas exécuté.
X-Content-Type-Options: nosniff
Effet : protection contre les attaques par confusion de type (MIME sniffing attacks).
3. X-Frame-Options Facile
Rôle : interdit à d'autres sites d'intégrer le vôtre dans une iframe. Protection directe contre le clickjacking.
X-Frame-Options: SAMEORIGIN
Effet : votre site ne peut être intégré que dans une iframe provenant de votre propre domaine.
4. Referrer-Policy Facile
Rôle : contrôle les informations envoyées dans le header Referer lorsqu'un utilisateur clique sur un lien sortant. Protège contre la fuite de données via URL.
Referrer-Policy: strict-origin-when-cross-origin
Effet : envoie l'origine complète pour les liens internes, mais seulement le domaine pour les liens externes.
5. Permissions-Policy Moyen
Rôle : anciennement Feature-Policy. Contrôle quelles API navigateur sont accessibles à votre site (caméra, micro, géolocalisation…).
Permissions-Policy: geolocation=(), microphone=(), camera=()
Effet : même si un script injecté tente d'accéder au micro de l'utilisateur, le navigateur refusera.
6. Content-Security-Policy (CSP) Difficile
Rôle : liste blanche des sources autorisées pour scripts, styles, images, etc. La défense la plus puissante contre les XSS, mais la plus complexe à configurer.
Configuration minimale (à adapter à votre site) :
Content-Security-Policy: default-src 'self';
script-src 'self' 'unsafe-inline' https://www.googletagmanager.com;
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
font-src 'self' https://fonts.gstatic.com;
img-src 'self' data: https:;
connect-src 'self';
⚠️ Attention : une CSP trop stricte peut casser votre site (scripts analytics, polices Google, iframes). Commencez en mode Report-Only pour détecter les blocages sans impacter les utilisateurs :
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report
7. Cross-Origin-Opener-Policy (COOP) Moyen
Rôle : isole votre site des autres pages ouvertes dans le même contexte (protection contre Spectre et autres attaques CPU).
Cross-Origin-Opener-Policy: same-origin
Effet : même si un utilisateur ouvre votre site depuis un onglet compromis, les deux environnements restent isolés.
Configuration concrète selon votre serveur
Apache / .htaccess (hébergement mutualisé OVH, cPanel, etc.)
Créez ou éditez le fichier .htaccess à la racine de votre site :
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
Header always set Cross-Origin-Opener-Policy "same-origin"
# CSP : à tester en Report-Only d'abord !
Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src 'self' data: https:;"
</IfModule>
Nginx
Dans votre fichier de configuration de site :
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Content-Security-Policy "default-src 'self'" always;
PHP (si pas d'accès au serveur)
Ajoutez au tout début de vos fichiers PHP principaux (ou dans un include chargé partout) :
<?php
header('Strict-Transport-Security: max-age=31536000; includeSubDomains');
header('X-Content-Type-Options: nosniff');
header('X-Frame-Options: SAMEORIGIN');
header('Referrer-Policy: strict-origin-when-cross-origin');
header('Permissions-Policy: geolocation=(), microphone=(), camera=()');
?>
Comment tester votre configuration
Trois outils gratuits pour vérifier vos headers :
- SecurityHeaders.com — note votre site de A+ à F, détaille chaque header manquant.
- Mozilla Observatory — observatory.mozilla.org, analyse plus poussée avec recommandations.
- VeriSite (shameless plug) — scan de conformité complet : headers + RGPD + RGAA + LCEN en 30 secondes.
Tester progressivement : activez un header à la fois et vérifiez que rien ne casse (surtout pour CSP). Surveillez la console navigateur (F12) pour détecter les blocages.
Les erreurs les plus fréquentes
- HSTS activé sans être prêt : si vous désactivez HTTPS plus tard, les utilisateurs ne pourront plus accéder au site pendant 1 an. Testez d'abord avec
max-age=60(1 minute) puis augmentez. - CSP trop restrictive : casse Google Fonts, Analytics, pixels publicitaires. Commencez en Report-Only + analysez les reports.
- X-Frame-Options en concurrence avec frame-ancestors CSP : les navigateurs privilégient CSP, donc X-Frame-Options devient purement déclaratif quand les deux sont définis.
- Oubli du
alwaysen Nginx : sans ce mot-clé, les headers ne sont envoyés qu'en 2xx, pas en 4xx/5xx (donc pas sur les pages d'erreur).
🔒 Vérifier vos headers en 30 secondes
VeriSite teste automatiquement vos 7 headers de sécurité + 29 autres critères de conformité. Rapport immédiat avec le code exact pour corriger.
Scanner mon siteFAQ : Headers HTTP de sécurité
Quelle différence entre HSTS, CSP et X-Frame-Options ?
HSTS (Strict-Transport-Security) force le navigateur à utiliser HTTPS et empêche les attaques de type SSL stripping. CSP (Content-Security-Policy) contrôle quelles sources externes peuvent charger des scripts/styles/images sur ta page, ce qui bloque la majorité des XSS. X-Frame-Options empêche ton site d'être chargé dans une iframe d'un autre site (anti-clickjacking). Les trois sont complémentaires — pas substituables. Un site sérieux a au minimum ces 3 headers + Permissions-Policy + Referrer-Policy.
Comment tester si mes headers HTTP sont bien configurés ?
3 outils gratuits : SecurityHeaders.com (le plus connu, donne une note A-F + détail), Mozilla Observatory (plus exigeant, intègre les bonnes pratiques de la Mozilla Foundation), et VeriSite qui vérifie en plus la cohérence RGPD + LCEN + RGAA + SSL en un seul rapport. Si tu vises uniquement les headers : viser un score A minimum sur SecurityHeaders.com.
Les headers HTTP sont-ils obligatoires pour le RGPD ?
Pas directement — mais l'article 32 du RGPD impose des « mesures techniques appropriées » pour protéger les données personnelles. Un site qui transmet des formulaires sans HSTS + CSP + X-Frame-Options est en infraction potentielle car les données peuvent être interceptées (man-in-the-middle, XSS, clickjacking). En cas de violation de données, l'absence de headers basiques aggrave la sanction CNIL (jusqu'à 2x le montant).
Quelle est la note de sécurité moyenne des sites français ?
D'après nos analyses de 5 000+ sites français en 2025-2026 : 72% des sites ont une note F sur SecurityHeaders.com (aucun header de sécurité), 18% ont D ou C (HSTS partiel), 10% ont B ou A. La conformité aux bonnes pratiques reste minoritaire — c'est une opportunité différenciante quand on présente un audit à un client.
CSP est-il compatible avec WordPress et Shopify ?
Oui mais avec configuration. Sur WordPress : utiliser un plugin comme Headers Security Advanced & HSTS WP, ou configurer via le fichier .htaccess. Attention au CSP strict qui peut casser l'admin si certains plugins chargent des ressources externes — toujours tester en mode Report-Only avant d'activer en production. Sur Shopify : limité (la plateforme contrôle les headers), mais on peut compléter via Custom Liquid ou un proxy Cloudflare. Sur Webflow / Wix / Squarespace : très limité, dépend de la formule.