🛡 Header Security Checker
Analyse les en-têtes de sécurité HTTP d'un site web et attribue une note globale.
Description
Cet outil analyse les en-têtes de sécurité HTTP d'un site web et attribue une note de A+ à F. Il vérifie la présence et la qualité de 10 en-têtes de sécurité essentiels.
En-têtes vérifiés
- Content-Security-Policy (CSP) - Prévient les attaques XSS en contrôlant les sources de contenu autorisées
- Strict-Transport-Security (HSTS) - Force l'utilisation de HTTPS
- X-Content-Type-Options - Empêche le MIME sniffing
- X-Frame-Options - Protège contre le clickjacking
- X-XSS-Protection - Filtre XSS intégré du navigateur (obsolète mais encore utile)
- Referrer-Policy - Contrôle les informations de referrer envoyées
- Permissions-Policy - Restreint les API du navigateur (caméra, micro, etc.)
- Cross-Origin-Opener-Policy - Isole le contexte de navigation
- Cross-Origin-Resource-Policy - Protège les ressources contre le chargement cross-origin
- Cross-Origin-Embedder-Policy - Contrôle le chargement de ressources cross-origin
Notation
- A+ - Excellent : tous les en-têtes présents et bien configurés
- A/B - Bon : la majorité des en-têtes sont présents
- C - Moyen : certains en-têtes importants manquent
- D/F - Faible : configuration de sécurité insuffisante
Utilisation
- Entrez l'URL d'un site web et cliquez sur "Analyser"
- Consultez la note globale et les détails de chaque en-tête
- Suivez les recommandations pour améliorer la sécurité
🛠 Comment corriger les en-têtes manquants
Voici les configurations à ajouter sur votre serveur pour les 4 en-têtes les plus critiques :
1. Content-Security-Policy (CSP)
Empêche les attaques XSS en contrôlant les sources de contenu autorisées (scripts, styles, images, etc.).
Apache — .htaccess ou config vhost :
Header set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';"
Nginx — bloc server :
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';" always;
IIS — web.config :
<customHeaders> <add name="Content-Security-Policy" value="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';" /> </customHeaders>
PHP — en haut du script :
header("Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';");
⚠ Adaptez les directives CSP à votre site. Commencez en mode Content-Security-Policy-Report-Only pour tester sans casser le site, puis passez en mode actif.
2. Strict-Transport-Security (HSTS)
Force le navigateur à utiliser uniquement HTTPS pendant la durée spécifiée. Protège contre les attaques de downgrade SSL.
Apache :
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Nginx :
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
IIS :
<customHeaders> <add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" /> </customHeaders>
PHP :
header("Strict-Transport-Security: max-age=31536000; includeSubDomains; preload");
⚠ max-age=31536000 = 1 an. includeSubDomains applique la règle aux sous-domaines. preload permet l'inscription sur la liste HSTS preload des navigateurs. Assurez-vous que HTTPS fonctionne parfaitement avant d'activer.
3. X-Frame-Options
Empêche l'intégration de votre site dans une iframe, protégeant contre le clickjacking.
Apache :
Header always set X-Frame-Options "DENY"
Nginx :
add_header X-Frame-Options "DENY" always;
IIS :
<customHeaders> <add name="X-Frame-Options" value="DENY" /> </customHeaders>
PHP :
header("X-Frame-Options: DENY");
ℹ Valeurs possibles : DENY (bloque tout), SAMEORIGIN (autorise le même domaine), ALLOW-FROM uri (obsolète). Utilisez DENY sauf si vous avez besoin d'iframe sur votre propre domaine.
4. X-Content-Type-Options
Empêche le navigateur de deviner le type MIME d'un fichier (MIME sniffing), réduisant les risques d'exécution de contenu malveillant.
Apache :
Header always set X-Content-Type-Options "nosniff"
Nginx :
add_header X-Content-Type-Options "nosniff" always;
IIS :
<customHeaders> <add name="X-Content-Type-Options" value="nosniff" /> </customHeaders>
PHP :
header("X-Content-Type-Options: nosniff");
⚡ Configuration complète rapide
Ajoutez les 4 headers d'un coup :
Apache — .htaccess :
<IfModule mod_headers.c> Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';" Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" Header always set X-Frame-Options "DENY" Header always set X-Content-Type-Options "nosniff" </IfModule>
Nginx — bloc server :
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';" always; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always; add_header X-Frame-Options "DENY" always; add_header X-Content-Type-Options "nosniff" always;
IIS — web.config :
<system.webServer>
<httpProtocol>
<customHeaders>
<add name="Content-Security-Policy" value="default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';" />
<add name="Strict-Transport-Security" value="max-age=31536000; includeSubDomains; preload" />
<add name="X-Frame-Options" value="DENY" />
<add name="X-Content-Type-Options" value="nosniff" />
</customHeaders>
</httpProtocol>
</system.webServer>
PHP — fichier commun (ex: init.php) :
header("Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none';");
header("Strict-Transport-Security: max-age=31536000; includeSubDomains; preload");
header("X-Frame-Options: DENY");
header("X-Content-Type-Options: nosniff");