Les headers de sécurité HTTP sont l’une des défenses les plus simples et efficaces contre une grande variété d’attaques web : XSS, clickjacking, MITM, fuite d’info via Referer. Caddy permet de les configurer en quelques lignes de Caddyfile. Voici le guide pratique 2026 avec config recommandée.
Voir notre guide Caddy complet.
Headers indispensables
exemple.sn {
reverse_proxy 127.0.0.1:3000
header {
# HSTS : forcer HTTPS pendant 1 an, inclure subdomains
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# Empêcher MIME sniffing
X-Content-Type-Options "nosniff"
# Empêcher clickjacking
X-Frame-Options "DENY"
# Politique Referer raisonnable
Referrer-Policy "strict-origin-when-cross-origin"
# Désactiver fonctions sensibles non utilisées
Permissions-Policy "geolocation=(), camera=(), microphone=(), payment=()"
# Cross-Origin policies
Cross-Origin-Opener-Policy "same-origin"
Cross-Origin-Embedder-Policy "require-corp"
# Retirer le header serveur (réduction surface d'attaque)
-Server
}
}
Content Security Policy (CSP)
Le header le plus puissant contre XSS, mais aussi le plus difficile à configurer correctement. Une CSP stricte refuse tout sauf ce qui est explicitement autorisé :
header {
Content-Security-Policy "
default-src 'self';
script-src 'self' 'sha256-XXXX' https://www.googletagmanager.com;
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
font-src 'self' data: https://fonts.gstatic.com;
connect-src 'self' https://api.exemple.sn;
frame-src 'none';
object-src 'none';
base-uri 'self';
form-action 'self';
upgrade-insecure-requests;
"
}
Démarche pragmatique :
- Démarrer en mode
Content-Security-Policy-Report-Onlypendant 1-2 semaines pour collecter les violations sans bloquer - Ajuster la policy au fur et à mesure
- Passer en mode enforcement quand stable
HSTS preload
Le flag preload dans HSTS permet de soumettre votre domaine au HSTS preload list, intégré nativement dans Chrome/Firefox/Safari. Une fois préchargé, votre domaine est forcé en HTTPS dès la première visite sans même avoir reçu le header HSTS.
- Conditions : HSTS max-age ≥ 31536000, includeSubDomains, preload, redirection HTTP→HTTPS
- Soumission : hstspreload.org
- Attention : irréversible, vérifiez bien que TOUS vos subdomains supportent HTTPS avant de soumettre
Cookie sécurisé
Caddy ne définit pas les cookies (votre app le fait), mais vérifiez que votre app utilise les flags Secure, HttpOnly, SameSite=Lax/Strict sur les cookies de session. Vous pouvez forcer Set-Cookie via Caddy si nécessaire.
Tester votre config
- securityheaders.com : audit gratuit, vise note A ou A+
- observatory.mozilla.org : audit Mozilla
- ssllabs.com/ssltest : test TLS, vise note A+
Adaptation Afrique de l’Ouest
Pour les sites e-commerce ou bancaires en Afrique de l’Ouest, les headers sécurité ne sont plus optionnels : la conformité PCI-DSS, RGPD, et les exigences sectorielles BCEAO l’imposent. La bonne nouvelle : avec Caddy, vous obtenez une note A+ sur securityheaders.com en 10 lignes de configuration.
Erreurs fréquentes
| Erreur | Cause | Solution |
|---|---|---|
| CSP casse le site | Trop strict d’emblée | Démarrer en Report-Only puis ajuster |
| HSTS bloque pour toujours | Test HTTPS pas validé | Démarrer max-age=300 (5min), puis monter |
| Frame-Options bloque iframe légitime | DENY trop strict | SAMEORIGIN ou ALLOW-FROM |
| Cookies non secure | App pas configurée | Set-Cookie … Secure; HttpOnly |
Pour aller plus loin
- Guide Caddy complet
- Installer Caddy
- Rate limiting Caddy
- OWASP Secure Headers : owasp.org/www-project-secure-headers