La protection d’un site WordPress ne se limite pas simplement à l’installation de certaines extensions de sécurité ou à la modification de l’URL de connexion.
Beaucoup d’attaques ciblent les navigateurs des utilisateurs plutôt que le serveur en lui-même. C’est à ce moment-là que les en-têtes de sécurité HTTP prennent effet.
Le serveur envoie ces en-têtes avec chaque réponse HTTP pour indiquer au navigateur comment traiter certains comportements essentiels : chargement de ressources, exécution de scripts, intégration via iframes, partage d’informations, et plus encore. S’ils sont bien configurés, ils permettent de :
Souvent sous-estimés ou mal configurés, ces en-têtes sont pourtant faciles à implémenter. Et surtout : ils n’imposent aucune surcharge à votre site tout en améliorant significativement la sécurité de vos visiteurs.
Beaucoup d’attaques ciblent les navigateurs des utilisateurs plutôt que le serveur en lui-même. C’est à ce moment-là que les en-têtes de sécurité HTTP prennent effet.
Le serveur envoie ces en-têtes avec chaque réponse HTTP pour indiquer au navigateur comment traiter certains comportements essentiels : chargement de ressources, exécution de scripts, intégration via iframes, partage d’informations, et plus encore. S’ils sont bien configurés, ils permettent de :
Souvent sous-estimés ou mal configurés, ces en-têtes sont pourtant faciles à implémenter. Et surtout : ils n’imposent aucune surcharge à votre site tout en améliorant significativement la sécurité de vos visiteurs.
- Prévenir des attaques XSS (cross-site scripting)
- Prévenir le détournement d’identité (clickjacking)
- Imposer l’emploi de connexions sécurisées via HTTPS.
- Limiter les API du navigateur (par exemple, la caméra, la géolocalisation…)
Souvent sous-estimés ou mal configurés, ces en-têtes demeurent néanmoins faciles à mettre en place. Et surtout : ils n’imposent aucune surcharge sur votre site tout en renforçant considérablement la sécurité de vos visiteurs.
Nous allons expliquer en détail la mise en place de ces en-têtes, que vous utilisiez Apache (par le biais du fichier .htaccess) ou Nginx (grâce au fichier nginx.conf).
Nous allons expliquer en détail la mise en place de ces en-têtes, que vous utilisiez Apache (par le biais du fichier .htaccess) ou Nginx (grâce au fichier nginx.conf).
Comment mettre en place ces en-têtes, C’est ce que je vais essayer de vous exposer de la manière la plus précise possible.
Phase initiale: Préparer l’examen de l’environnement.
Avant d’apporter des modifications, il est primordial de comprendre l’environnement dans lequel notre site WordPress évolue. Avec ces données, vous allez rapidement saisir ce qui cloche ou pourquoi certaines choses se produisent.
Pour commencer, créons un fichier info.php qui nous fournira des détails cruciaux sur le serveur accueillant votre site internet.
Générer le fichier info.php
Procédure simple à l’aide de Bloc-notes (Windows) ou d’un éditeur de texte (Linux/macOS) :
Ouvrez l’éditeur de texte, qu’il s’agisse de Bloc-notes, Gedit, Sublime Text ou d’un autre.
Copier et coller ce code :
Pour commencer, créons un fichier info.php qui nous fournira des détails cruciaux sur le serveur accueillant votre site internet.
Générer le fichier info.php
Procédure simple à l’aide de Bloc-notes (Windows) ou d’un éditeur de texte (Linux/macOS) :
Ouvrez l’éditeur de texte, qu’il s’agisse de Bloc-notes, Gedit, Sublime Text ou d’un autre.
Copier et coller ce code :
<?php
phpinfo();
?>
Nommez le fichier précisément info.php lors de son enregistrement.
Forme : Tous les fichiers
Codage : UTF-8 (préféré).
C’est le moment de l’envoyer vers votre site internet:
Pour un tutoriel détailler sur l’interface de FileZilla Aller directement sur le wiki. ICI
La procédure avec FileZilla :
Consultez le site suivant pour télécharger et installer FileZilla : https://filezilla-project.org
Démarrez FileZilla.
Dans la partie supérieure, veuillez saisir vos identifiants de connexion :
Hôte : l’adresse de votre domaine (par exemple, ftp.votresite.fr) ou l’adresse IP du serveur.
Identifiant : attribué par votre fournisseur d’hébergement.
Mot de passe : celui établi pour la connexion FTP/SFTP.
Port : 21 pour FTP et 22 pour SFTP (si activé).
Cliquez sur la connexion rapide.
Forme : Tous les fichiers
Codage : UTF-8 (préféré).
C’est le moment de l’envoyer vers votre site internet:
Pour un tutoriel détailler sur l’interface de FileZilla Aller directement sur le wiki. ICI
La procédure avec FileZilla :
Consultez le site suivant pour télécharger et installer FileZilla : https://filezilla-project.org
Démarrez FileZilla.
Dans la partie supérieure, veuillez saisir vos identifiants de connexion :
Hôte : l’adresse de votre domaine (par exemple, ftp.votresite.fr) ou l’adresse IP du serveur.
Identifiant : attribué par votre fournisseur d’hébergement.
Mot de passe : celui établi pour la connexion FTP/SFTP.
Port : 21 pour FTP et 22 pour SFTP (si activé).
Cliquez sur la connexion rapide.
Transférer le fichier info.php
Placez le fichier info.php dans le dossier principal de votre site WordPress :
Selon l’hébergeur, le répertoire est souvent appelé /www, /htdocs ou /public_html.
On peut facilement l’identifier à la présence des trois dossiers logique de wordpress: wp-content, wp-admin, wp-includes.
Maintenant, nous allons rendre visite à ce fichier
https://votresite.fr/info.php
Visitez :
Noter les informations utiles !
Avant de mettre en place des politiques de sécurité, il est crucial d’avoir une compréhension exacte de la configuration de votre serveur. Voici une liste des éléments à examiner sur la page info.php, ainsi que l’importance de chacun d’eux :
- Version de PHP utilisée (ex : PHP 8.3.21, c’est la version que je recommande au moment où j’écris ces mots) :
Vérifiez que votre version de PHP est à jour et supportée. Les versions obsolètes comme PHP 5.6, 7.0, 7.1 ou même 7.4 ne reçoivent plus de mises à jour de sécurité.
Utiliser une version obsolète expose votre site à des failles connues et souvent automatisées - Serveur web employé (Apache, Nginx, LiteSpeed, etc.) :
Cette donnée vous informe sur le genre de serveur HTTP qui fait fonctionner votre site. C’est crucial, puisqu’il existe une variété de méthodes et de configuration des en-têtes propres à chaque serveur :
—Apache se sert habituellement du fichier .htaccess, qui est positionné à la racine du site, pour insérer des « headers » grâce à la directive Header set (si le module mod_headers est en marche).
—Nginx ne prend pas en charge la configuration à l’aide de fichiers .htaccess. Il vous faut modifier les fichiers de configuration (nginx.conf ou vhost spécifique) en utilisant add_header, dans les sections server ou location.
—LiteSpeed, fréquemment utilisé sur des hébergements mutualisés de qualité, est généralement compatible avec la majorité des directives .htaccess d’Apache, y compris celles relatives aux en-têtes de sécurité. - Cloudflare, proxy ou CDN : si vous employez un proxy inverse1 ou un CDN2, certains headers pourraient être altérés, négligés ou répétés. Il sera nécessaire de les configurer à la fois sur le serveur d’origine et parfois directement dans l’interface du CDN (tels que Cloudflare, Sucuri, etc.).
—Assurez-vous également de savoir si votre hébergement est partagé ou dédié : sur un hébergement mutualisé, l’accès se limite généralement au fichier .htaccess, alors que sur un VPS ou un serveur dédié, vous aurez la possibilité d’intervenir plus profondément dans les fichiers du serveur.
—Assurez-vous que vous n’avez pas un serveur proxy (comme Cloudflare, etc.) qui pourrait perturber les headers.
Modules actifs
(ex : mod_headers)
Dans le contexte d’Apache, les modules représentent des éléments supplémentaires qui offrent la possibilité d’élargir les fonctionnalités du serveur web. Certains sont indispensables au bon fonctionnement des en-têtes HTTP.
Module principal nécessaire pour ce guide :
mod_headers : il autorise l’ajout, la modification ou la suppression d’en-têtes HTTP à travers .htaccess. En son absence, des instructions telles que Header set seront négligées.
mod_headers : il autorise l’ajout, la modification ou la suppression d’en-têtes HTTP à travers .htaccess. En son absence, des instructions telles que Header set seront négligées.
Module | Fonction principale |
---|---|
mod_headers | Gestion des en-têtes HTTP (sécurité, contrôle, redirection) |
mod_rewrite | Réécriture d’URL, essentiel pour les permaliens WordPress |
mod_ssl | Prise en charge des connexions HTTPS |
mod_deflate | Compression GZIP des ressources (HTML, CSS, JS…) |
mod_expires | Configuration du cache navigateur via les en-têtes Expires |
mod_php | Intégration directe du moteur PHP dans Apache |
mod_security | Web Application Firewall (WAF) contre les attaques courantes |
mod_mime | Définition et traitement des types MIME |
mod_autoindex | Affichage des listes de fichiers d’un répertoire (à désactiver) |
Comment vérifier les modules activés (en SSH) :
apachectl -M
Fichier de configuration PHP actif
(Loaded Configuration File)
Ceci vous présente le fichier php.ini qui est effectivement utilisé. Chaque directive PHP globale y est précisée.
Pas essentiel, mais si vous désirez vous pouvoir parfaitement :
—Désactiver la visualisation des erreurs (display_errors = Off)
—Masquer la version de PHP (expose_php est désactivé)
—Restreindre les ressources (upload_max_filesize, post_max_size, memory_limit)
Pas essentiel, mais si vous désirez vous pouvoir parfaitement :
—Désactiver la visualisation des erreurs (display_errors = Off)
—Masquer la version de PHP (expose_php est désactivé)
—Restreindre les ressources (upload_max_filesize, post_max_size, memory_limit)
Extensions PHP installées :
Ces modules intègrent des fonctionnalités propres à PHP. Seuls quelques-unes sont importantes :
openssl, curl, json, mbstring, pdo_mysql et fileinfo
— Pour WordPress : zip, gd ou imagick sont également bénéfiques. ( mais pas obligatoire)
Si elles ne sont pas indispensables, d’autres extensions moins courantes pourraient rendre votre serveur vulnérable à des failles de sécurité :
—ftp : donne la possibilité d’effectuer des connexions FTP à partir de PHP. Aujourd’hui, elle est très dangereuse. C’est une aubene pour les hackers, elle est alors utilisée pour envoyer des fichiers non autorisés.
–imap : sert à lire des boîtes de courriels par le biais de PHP. Risque d’exposition à des attaques par injection ou configurations incorrectes.
—ldap : pour effectuer des requêtes sur un annuaire LDAP. Une extension puissante, mais souvent peu pratique sur un site WordPress standard, elle peut devenir vulnérable si elle n’est pas correctement configurée.
—Exif : utilisée pour l’analyse des métadonnées intégrées dans les images. Peut être exploitée lors d’attaques par des images malformées (attaque via exif_read_data).
—sockets : autorise les liaisons réseau de bas niveau. Rarement employée dans un contexte web standard, elle peut cependant ouvrir des portes réseau imprévues.
L’activation d’une extension inutile élargit la surface d’attaque.
openssl, curl, json, mbstring, pdo_mysql et fileinfo
— Pour WordPress : zip, gd ou imagick sont également bénéfiques. ( mais pas obligatoire)
Si elles ne sont pas indispensables, d’autres extensions moins courantes pourraient rendre votre serveur vulnérable à des failles de sécurité :
—ftp : donne la possibilité d’effectuer des connexions FTP à partir de PHP. Aujourd’hui, elle est très dangereuse. C’est une aubene pour les hackers, elle est alors utilisée pour envoyer des fichiers non autorisés.
–imap : sert à lire des boîtes de courriels par le biais de PHP. Risque d’exposition à des attaques par injection ou configurations incorrectes.
—ldap : pour effectuer des requêtes sur un annuaire LDAP. Une extension puissante, mais souvent peu pratique sur un site WordPress standard, elle peut devenir vulnérable si elle n’est pas correctement configurée.
—Exif : utilisée pour l’analyse des métadonnées intégrées dans les images. Peut être exploitée lors d’attaques par des images malformées (attaque via exif_read_data).
—sockets : autorise les liaisons réseau de bas niveau. Rarement employée dans un contexte web standard, elle peut cependant ouvrir des portes réseau imprévues.
L’activation d’une extension inutile élargit la surface d’attaque.
Attention : cette page info.php peut également révéler des chemins absolus, des noms de fichiers sensibles, voire la structure exacte de votre serveur. Elle ne doit jamais rester accessible.
Pensez à supprimer ce fichier après usage : « info.php » donne beaucoup d’informations sensibles !

Comprendre les en-têtes de sécurité
Les en-têtes de sécurité ont une importance cruciale pour la protection de votre site WordPress. Ces éléments ne sont pas perceptibles par les utilisateurs, cependant ils déterminent la manière dont le navigateur doit réagir aux ressources, scripts et intégrations de tiers. S’ils ne sont pas correctement configurés, ils pourraient rendre votre site vulnérable à des failles sévères. Lorsqu’ils sont correctement mis en œuvre, ils fonctionnent comme un bouclier invisible, neutralisant de nombreuses attaques avant qu’elles ne parviennent à vos scripts PHP ou à vos formulaires.
Dans cette partie, nous examinerons les principaux en-têtes de sécurité HTTP : leur rôle précis, les paramètres conseillés, les valeurs à proscrire et les erreurs fréquentes à éviter. On accordera une attention spéciale à leur adéquation avec WordPress, les constructeurs de pages et les extensions populaires.
Dans cette partie, nous examinerons les principaux en-têtes de sécurité HTTP : leur rôle précis, les paramètres conseillés, les valeurs à proscrire et les erreurs fréquentes à éviter. On accordera une attention spéciale à leur adéquation avec WordPress, les constructeurs de pages et les extensions populaires.
Conclusion : les en-têtes HTTP, en bref
Les en-têtes de sécurité HTTP ne se contentent pas d’améliorer votre score sur des outils comme SecurityHeaders ou Mozilla Observatory. Ils jouent un rôle concret et combiné dans la protection de votre site WordPress, de vos données, et de vos visiteurs.
- Un proxy inverse désigne un serveur placé devant les serveurs web et transmettant les requêtes des clients (par exemple, les navigateurs web) à ces serveurs web. Les solutions de proxy inverse sont généralement déployées pour améliorer la sécurité, les performances et la fiabilité. ↩︎
- Un réseau de diffusion de contenu (CDN pour content delivery network) est un groupe de serveurs répartis géographiquement qui met en cache le contenu à proximité des utilisateurs finaux. ↩︎
- Un nonce (abréviation de number used once) en PHP est une valeur cryptographiquement unique et temporaire utilisée pour valider l’authenticité d’une requête. Dans le contexte de WordPress, un nonce permet de s’assurer qu’une action est bien initiée par un utilisateur légitime du site et non par un script malveillant (attaque CSRF – Cross Site Request Forgery). ↩︎