Lorsqu'un navigateur charge une page web, le serveur envoie des en-têtes HTTP en réponse. Ces en-têtes contiennent des instructions que le navigateur doit respecter. Les en-têtes de sécurité sont parmi ces instructions — ils permettent de protéger les utilisateurs contre des attaques courantes sans modifier une seule ligne de code frontend.
Pourquoi c'est important ?
La majorité des attaques web exploitent des comportements par défaut des navigateurs. Sans en-têtes de sécurité, votre site est vulnérable à des attaques comme le Clickjacking, le Cross-Site Scripting (XSS) ou le vol de cookies. Ces attaques ne nécessitent pas de faille dans votre code — elles exploitent simplement l'absence de directives explicites.
Les en-têtes essentiels
Strict-Transport-Security (HSTS)
Force le navigateur à utiliser HTTPS pour toutes les requêtes futures. Avec l'option preload, votre domaine peut être intégré dans la liste des domaines HTTPS-only des navigateurs.
X-Frame-Options
Empêche votre site d'être intégré dans une <iframe> sur un autre domaine — protection directe contre le Clickjacking.
X-Content-Type-Options
Interdit au navigateur de deviner le type MIME d'une ressource. Sans cet en-tête, un attaquant peut faire passer un fichier malveillant pour une image.
Referrer-Policy
Contrôle les informations envoyées dans l'en-tête Referer lors de la navigation. Protège la vie privée des utilisateurs et évite les fuites d'URL internes.
Permissions-Policy
Désactive les fonctionnalités du navigateur que votre site n'utilise pas : géolocalisation, caméra, microphone, etc. Réduit la surface d'attaque.
Content-Security-Policy (CSP)
L'en-tête le plus puissant et le plus complexe. Il définit exactement quelles sources de scripts, styles, images et polices sont autorisées. Une CSP bien configurée bloque la quasi-totalité des attaques XSS.
Comment les configurer avec Nginx ?
Ces en-têtes se configurent dans le bloc server de votre fichier de configuration Nginx avec la directive add_header. L'avantage de les gérer au niveau du serveur web plutôt que dans l'application est qu'ils s'appliquent à toutes les réponses, indépendamment du framework utilisé.
Vérifier votre configuration
Deux outils gratuits permettent d'auditer vos en-têtes :

SSL Labs (ssllabs.com) analyse votre configuration TLS
Security Headers (securityheaders.com) analyse vos en-têtes HTTP

Sur gholitech.fr, cette configuration a permis d'obtenir un score A+ sur SSL Labs et A sur Security Headers.
Une précision importante : les en-têtes HTTP constituent une couche de défense côté navigateur, mais la sécurité applicative reste essentielle. Sur gholitech.fr, Django est configuré avec l'auto-escaping activé toute entrée utilisateur est automatiquement échappée avant rendu. Bien que le score affiché soit A en raison de la présence d'unsafe-inline, cette directive est compensée par cette protection applicative, ce qui neutralise le risque en pratique.