Middleware & Sécurité

Headers de sécurité

Le middleware security_headers_middleware injecte automatiquement un ensemble de headers de sécurité à chaque réponse, en plus du header CSP. Il s'active via .with_header_security(true) dans le builder.

Headers injectés

HeaderValeurProtection
Content-Security-PolicyDynamique (avec nonce par requête)Restreint les sources autorisées pour scripts, styles, images, etc.
X-Content-Type-OptionsnosniffEmpêche le navigateur de deviner le type MIME — bloque les attaques MIME sniffing
X-Frame-OptionsDENYInterdit l'intégration de la page dans une iframe — protège contre le clickjacking
X-XSS-Protection1; mode=blockActive le filtre XSS des navigateurs legacy (IE/Edge ancien)
Referrer-Policystrict-origin-when-cross-originEnvoie le referrer complet en same-origin, seulement l'origine en cross-origin, rien en HTTP→HTTPS
Permissions-Policygeolocation=(), microphone=(), camera=()Désactive l'accès à la géolocalisation, au micro et à la caméra
Cross-Origin-Embedder-Policyrequire-corpExige que les ressources cross-origin soient explicitement autorisées (CORP)
Cross-Origin-Opener-Policysame-originIsole le contexte de navigation — empêche les attaques cross-origin via window.opener
Cross-Origin-Resource-Policysame-originInterdit le chargement des ressources depuis d'autres origines
Strict-Transport-Securitymax-age=31536000; includeSubDomainsForce HTTPS pendant 1 an, sous-domaines inclus (HSTS)

Activation

CSP seul (sans headers de sécurité additionnels)

.middleware(|m| {
    m.with_csp(|c| c)
})

CSP + tous les headers de sécurité

.middleware(|m| {
    m.with_csp(|c| {
        c.with_header_security(true)
         .with_nonce(true)
    })
})

Preset strict complet

.middleware(|m| {
    m.with_csp(|c| {
        c.policy(SecurityPolicy::strict())
         .with_header_security(true)
    })
})

Notes

HSTS (Strict-Transport-Security) — Ce header est toujours envoyé, même si l'application tourne en HTTP derrière un reverse proxy. Le navigateur le respecte uniquement sur les connexions HTTPS. En production, assurez-vous que votre proxy (nginx, Caddy, Cloudflare…) termine le TLS.

COEP (Cross-Origin-Embedder-Policy: require-corp) — Ce header est requis pour utiliser SharedArrayBuffer et certaines APIs haute performance. Il peut bloquer le chargement de ressources cross-origin (images, scripts, fonts) qui ne renvoient pas le header Cross-Origin-Resource-Policy. Si vous chargez des ressources depuis des CDN tiers, vérifiez leur compatibilité ou désactivez COEP via une SecurityPolicy personnalisée.

X-XSS-Protection — Header legacy, ignoré par les navigateurs modernes (Chrome, Firefox). Conservé pour la compatibilité avec les navigateurs plus anciens.