Comprendre les en-têtes HTTP de sécurité pour votre site WordPress

Votre site WordPress peut être sécurisé de nombreuses manières, mots de passe forts, bon hébergement, extensions à jour. Mais il existe une couche de protection souvent négligée : les en-têtes HTTP de sécurité.

Ce sont de petites instructions que votre serveur envoie au navigateur. Elles indiquent au navigateur comment se comporter lors du chargement de votre site. Correctement implémentées, elles peuvent prévenir des attaques comme les Cross-Site Scripting (XSS), le clickjacking et la divulgation d’informations.

La meilleure partie ? Elles sont relativement faciles à ajouter à WordPress. Ce guide couvre les en-têtes les plus importants, pourquoi ils comptent et comment les implémenter.

Table des matières

  1. Que sont les en-têtes HTTP de sécurité ?
  2. Les en-têtes essentiels pour WordPress
  3. Implémentation dans WordPress (sans code et personnalisée)
  4. Tester vos en-têtes

Que sont les en-têtes HTTP de sécurité ?

Lorsqu’un navigateur demande votre site WordPress, votre serveur répond avec le contenu de la page plus un ensemble d’en-têtes HTTP. Les en-têtes de sécurité indiquent au navigateur des choses comme :

  • « N’autorisez pas d’autres sites à intégrer mon site dans un iframe. »
  • « Ne chargez des ressources que depuis mon propre domaine. »
  • « N’envoyez jamais de cookies sur des connexions non sécurisées. »

Sans ces en-têtes, les navigateurs adoptent des comportements par défaut moins sécurisés. Les ajouter ne coûte presque rien et renforce considérablement votre site.

Les en-têtes essentiels pour WordPress

Voici les en-têtes que tout site WordPress devrait considérer, des plus critiques aux plus optionnels.

1. X-Frame-Options: DENY

Prévient : Le clickjacking (cacher des liens malveillants sous des éléments d’interface trompeurs)

Cet en-tête empêche d’autres sites d’intégrer votre site dans un iframe. À moins que vous n’ayez explicitement besoin que votre site soit intégrable (par exemple pour un widget), verrouillez-le.

Valeur recommandée :

X-Frame-Options: DENY

2. X-Content-Type-Options: nosniff

Prévient : Le reniflage de type MIME (les navigateurs devinent les types de fichiers, ce qui peut transformer des images en code exécutable)

Cet en-tête indique au navigateur : « Ne devinez pas le type de fichier. Utilisez exactement ce que j’ai indiqué. »

Valeur recommandée :

X-Content-Type-Options: nosniff

3. Referrer-Policy: strict-origin-when-cross-origin

Contrôle : Quelle quantité d’informations de référent (d’où vient l’utilisateur) est envoyée à d’autres sites

Cela équilibre confidentialité et fonctionnalité. Votre propre site voit les référents complets ; les sites externes ne voient que le domaine d’origine.

Valeur recommandée :

Referrer-Policy: strict-origin-when-cross-origin

(Remarque : c’est la valeur par défaut dans les navigateurs modernes)

4. Strict-Transport-Security (HSTS)

Impose : L’accès exclusif en HTTPS

Une fois qu’un utilisateur visite votre site en HTTPS, HSTS indique au navigateur de ne jamais utiliser HTTP à nouveau pour ce domaine, même si l’utilisateur tape http://.

Valeur recommandée :

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload

(Expiration de 2 ans, inclut les sous-domaines, prêt pour les listes de préchargement des navigateurs)

5. Set-Cookie (Secure + HttpOnly + SameSite)

Protège : Les cookies de session contre le vol et la falsification

Ce sont des attributs sur l’en-tête cookie, pas un en-tête séparé. Ils garantissent que les cookies ne sont envoyés qu’en HTTPS, ne peuvent pas être lus par JavaScript, et ne sont pas envoyés entre différents sites.

Format de cookie recommandé :

Set-Cookie: nom=valeur; Secure; HttpOnly; SameSite=Strict

6. Content-Security-Policy (CSP)

Prévient : Les attaques XSS et les injections de données, le plus important CSP est puissant mais complexe. Il indique au navigateur exactement quelles sources sont autorisées à charger des scripts, styles, images, polices, etc. Une CSP bien configurée peut arrêter une attaque XSS même si un attaquant trouve une vulnérabilité.

Valeur de base recommandée (ajustez pour votre site) :

Content-Security-Policy: default-src 'self'; script-src 'self' 'unsafe-inline' https:; style-src 'self' 'unsafe-inline' https:; img-src 'self' data: https:; object-src 'none'

Attention : CSP est facile à casser. Testez minutieusement avant de déployer en production.

7. Server / X-Powered-By (Supprimer ou Obfusquer)

Prévient : La divulgation d’informations aux attaquants

Ces en-têtes annoncent exactement quel logiciel serveur et quelle version vous utilisez, utile pour les attaquants qui recherchent des vulnérabilités connues. Supprimez ou minimiser ces informations.

Recommandé : Supprimez complètement, ou définissez des valeurs génériques comme Server: webserver

En-têtes à désactiver (anciens ou problématiques)

En-têteAction
X-XSS-ProtectionDéfinir à 0 (les navigateurs modernes l’ignorent ; sur les anciens, il introduit plus de risques que d’avantages)
Public-Key-PinsObsolète. Ne pas utiliser.

Implémentation dans WordPress

Vous avez plusieurs options, des plugins au code manuel.

Option 1 : Utiliser un plugin (le plus simple)

Plugins recommandés :

  • Security Headers (gratuit, interface simple)
  • Really Simple SSL (gère également HSTS)
  • NinjaFirewall (pare-feu avancé + en-têtes)

Ces plugins vous permettent d’activer/désactiver les en-têtes sans toucher au code.

Option 2 : Via .htaccess (Apache)

Ajoutez à votre fichier .htaccess racine :

<IfModule mod_headers.c>
    Header set X-Frame-Options "DENY"
    Header set X-Content-Type-Options "nosniff"
    Header set Referrer-Policy "strict-origin-when-cross-origin"
    Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
    Header unset X-Powered-By
    Header unset Server
</IfModule>

Option 3 : Via Nginx

Ajoutez à votre bloc de configuration serveur :

add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Powered-By "" always;

Option 4 : Via le functions.php de WordPress (PHP)

Pour les en-têtes qui ne peuvent pas être définis au niveau du serveur, ou pour les en-têtes conditionnels :

add_action('send_headers', 'add_security_headers');
function add_security_headers() {
    header('X-Frame-Options: DENY');
    header('X-Content-Type-Options: nosniff');
    header('Referrer-Policy: strict-origin-when-cross-origin');
    // Ne définissez PAS HSTS ici si vous avez du contenu mixte HTTP/HTTPS
}

Important : HSTS devrait idéalement être défini au niveau du serveur, pas en PHP, pour protéger toutes les requêtes y compris les fichiers statiques.

Tester vos en-têtes

Après l’implémentation, vérifiez qu’ils fonctionnent correctement.

Outils en ligne gratuits

  • Mozilla Observatory (observatory.mozilla.org) – Scan complet avec notation par lettre
  • SecurityHeaders.com – Vérification rapide des en-têtes courants
  • SmartScanner – Parcourt l’intégralité de votre site WordPress, pas seulement la page d’accueil

Outils de développement du navigateur

  1. Ouvrez votre site.
  2. Appuyez sur F12 → onglet Network.
  3. Rechargez la page.
  4. Cliquez sur la première requête (généralement le document HTML).
  5. Cherchez Response Headers.

Vous devriez voir vos en-têtes ajoutés listés.

Ce qu’il faut vérifier

  • Tous les en-têtes attendus sont présents
  • Pas d’en-têtes conflictuels (ex : deux politiques CSP différentes)
  • Les cookies montrent les attributs Secure et HttpOnly
  • HSTS est défini uniquement sur les réponses HTTPS

Réflexions finales

Les en-têtes HTTP de sécurité ne remplacent pas une bonne hygiène WordPress, maintenir les extensions à jour, utiliser une authentification forte et choisir un hébergement fiable. Mais ils constituent un ajout puissant et peu coûteux qui ferme plusieurs vecteurs d’attaque courants.

Commencez modestement. Implémentez d’abord X-Frame-OptionsX-Content-Type-Options et Referrer-Policy. Ajoutez ensuite HSTS. Enfin, abordez CSP progressivement.

Testez après chaque modification. Et rappelez-vous : certains en-têtes (notamment CSP) peuvent casser des fonctionnalités s’ils sont mal configurés. Testez toujours d’abord sur un site de staging.

Ce billet vous a été utile?
Offrez-nous un café!
Tags: