Déployer un certificat SSL n'est que le début de la sécurisation des communications web. Les en-têtes de sécurité HTTP fournissent des couches de protection supplémentaires.
Un site avec un certificat parfait mais sans en-têtes de sécurité reste vulnérable à de nombreuses attaques.
Comprendre les En-têtes de Sécurité
Les en-têtes de sécurité HTTP sont des réponses que les serveurs envoient aux navigateurs pour instruire un comportement spécifique lié à la sécurité.
En-têtes essentiels liés à SSL/TLS
| En-tête | Fonction |
|---|---|
| Strict-Transport-Security | Force l'utilisation de HTTPS |
| Content-Security-Policy | Contrôle les ressources chargées |
| X-Content-Type-Options | Prévient le MIME sniffing |
| X-Frame-Options | Prévient le clickjacking |
| Referrer-Policy | Contrôle les informations de référent |
| Permissions-Policy | Contrôle les fonctionnalités du navigateur |
Pourquoi les En-têtes de Sécurité Comptent
Les en-têtes adressent des vulnérabilités que SSL seul ne peut pas couvrir.
Attaques prévenues
- SSL stripping : HSTS empêche les attaques de downgrade
- XSS : CSP bloque l'exécution de scripts malveillants
- Clickjacking : X-Frame-Options empêche l'inclusion dans des iframes malveillantes
- Contenu mixte : CSP bloque le chargement de ressources HTTP sur HTTPS
Bénéfices additionnels
- Amélioration des scores dans les outils d'audit de sécurité
- Conformité avec certaines certifications
- Signal aux attaquants que votre site prend la sécurité au sérieux
Configurer les En-têtes Clés
L'implémentation varie selon le serveur web, mais les principes sont cohérents.
Strict-Transport-Security (HSTS)
Force les navigateurs à toujours utiliser HTTPS.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
Directives :
max-age: durée en secondes (31536000 = 1 an)includeSubDomains: applique à tous les sous-domainespreload: pour la soumission à la liste de préchargement des navigateurs
Content-Security-Policy (CSP)
Contrôle quelles ressources peuvent être chargées.
Politique de base :
Content-Security-Policy: default-src 'self'; script-src 'self' cdn.example.com; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'; connect-src 'self' api.example.com; frame-ancestors 'none'
Mode report-only pour les tests :
Content-Security-Policy-Report-Only: default-src 'self'; report-uri /csp-report
X-Content-Type-Options
Prévient le MIME sniffing.
X-Content-Type-Options: nosniff
X-Frame-Options
Prévient le clickjacking.
X-Frame-Options: DENY
Ou pour autoriser le même site :
X-Frame-Options: SAMEORIGIN
Referrer-Policy
Contrôle les informations envoyées dans les en-têtes de référent.
Referrer-Policy: strict-origin-when-cross-origin
Options courantes :
no-referrer: jamais d'envoi de référentsame-origin: uniquement pour les requêtes same-originstrict-origin-when-cross-origin: origine seulement pour cross-origin
Permissions-Policy
Contrôle les fonctionnalités du navigateur disponibles.
Permissions-Policy: geolocation=(), camera=(), microphone=(), payment=()
Configuration par Serveur
Configuration Nginx
server {
# HSTS
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
# CSP
add_header Content-Security-Policy "default-src 'self'; script-src 'self'" always;
# Autres en-têtes
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), camera=(), microphone=()" always;
}
Configuration Apache
<IfModule mod_headers.c>
# HSTS
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
# CSP
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'"
# Autres en-têtes
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "DENY"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), camera=(), microphone=()"
</IfModule>
Bonnes Pratiques
Implémentez les en-têtes de sécurité efficacement avec ces recommandations.
Déploiement progressif
- Commencez par les en-têtes simples (X-Content-Type-Options, X-Frame-Options)
- Ajoutez HSTS avec un court max-age
- Implémentez CSP en mode report-only
- Augmentez progressivement la rigueur
Tests et validation
# Vérifier les en-têtes
curl -I https://example.com
# Test détaillé avec verbose
curl -v https://example.com 2>&1 | grep -i "security\|policy\|strict"
Outils en ligne :
- Security Headers (securityheaders.com)
- Mozilla Observatory (observatory.mozilla.org)
- SSL Labs (ssllabs.com)
Maintenance continue
- Révisez régulièrement à mesure que les bonnes pratiques évoluent
- Assurez la cohérence entre tous les environnements
- Surveillez les rapports d'application pour identifier les problèmes
Conclusion
Les en-têtes de sécurité HTTP sont des compléments essentiels à SSL/TLS. HSTS prévient les attaques de downgrade, CSP atténue les XSS et le contenu mixte.
Implémenter ces en-têtes correctement renforce significativement votre posture de sécurité avec un effort minimal une fois la configuration initiale complète.