WordPress propulse plus de 40 % du Web, ce qui en fait une cible de choix pour les attaques automatisées. La bonne nouvelle : la plupart des piratages WordPress réussis exploitent des vulnérabilités bien connues et facilement évitables. Cette liste de contrôle vous guide à travers chaque couche de la sécurité WordPress, du chiffrement du transport au durcissement au niveau du serveur. Parcourez-la systématiquement, et votre site sera nettement plus difficile à compromettre que la grande majorité des installations WordPress existantes.
Sécuriser votre site WordPress avec SSL et HTTPS
HTTPS chiffre toutes les données circulant entre les navigateurs de vos visiteurs et votre serveur. Sans cela, les identifiants de connexion, les envois de formulaires et les cookies de session sont transmis en clair, ce qui les rend triviaux à intercepter sur les réseaux publics.
- Installez un certificat SSL valide : la plupart des hébergeurs proposent des certificats Let's Encrypt gratuits qui se renouvellent automatiquement tous les 90 jours. Si votre hôte ne prend pas en charge Let's Encrypt, l'offre gratuite de Cloudflare inclut un certificat SSL partagé. Il n'y a aucune raison de fonctionner sans HTTPS en 2025.
- Redirigez tout le trafic HTTP vers HTTPS : mettez en place une redirection 301 afin que chaque requête vers
http://soit transférée de manière permanente vershttps://. Sur Apache, ajoutez ceci à votre.htaccess:
Sur Nginx, ajoutez un bloc server qui redirige :RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]server { listen 80; server_name example.com www.example.com; return 301 https://$host$request_uri; } - Corrigez tous les avertissements de contenu mixte : après être passé à HTTPS, recherchez les images, scripts ou feuilles de style qui se chargent encore via HTTP. La console du navigateur les signalera comme des avertissements « Mixed Content ». Mettez à jour les URL
http://codées en dur dans votre base de données à l'aide d'un outil de recherche-remplacement comme Better Search Replace. - Activez l'en-tête HSTS : HTTP Strict Transport Security indique aux navigateurs de toujours utiliser HTTPS pour votre domaine, même si un utilisateur tape
http://manuellement. Ajoutez cet en-tête avec un max-age d'au moins six mois (15768000 secondes). N'activezincludeSubDomainsque si tous vos sous-domaines prennent également en charge HTTPS.
Configurer les en-têtes de sécurité HTTP pour WordPress
Les en-têtes de sécurité sont des instructions que votre serveur envoie au navigateur. Ils ne coûtent rien en termes de performance mais offrent une protection substantielle contre les vecteurs d'attaque courants comme le clickjacking, la confusion de type MIME et le cross-site scripting.
- X-Frame-Options : SAMEORIGIN : empêche vos pages d'être intégrées dans des iframes sur d'autres domaines. Cela bloque les attaques de clickjacking où un attaquant superpose votre site avec des éléments invisibles pour inciter les utilisateurs à cliquer sur quelque chose qu'ils n'avaient pas l'intention de cliquer.
- X-Content-Type-Options : nosniff : empêche les navigateurs de deviner le type MIME d'un fichier. Sans cet en-tête, un navigateur pourrait exécuter un fichier texte comme du JavaScript si le contenu ressemble à du code, ce qui ouvre la porte à l'injection de scripts.
- Referrer-Policy : strict-origin-when-cross-origin : contrôle la quantité d'informations d'URL envoyées lors de la navigation vers des sites externes. Cela empêche la fuite de paramètres d'URL sensibles (comme les jetons de réinitialisation de mot de passe) vers des serveurs tiers.
- Permissions-Policy : restreint l'accès aux fonctionnalités du navigateur comme la caméra, le microphone, la géolocalisation et les API de paiement pour le contenu intégré. Même si vous n'utilisez pas ces fonctionnalités, définir la politique empêche les scripts injectés d'en abuser.
- Content-Security-Policy (CSP) : l'en-tête de sécurité le plus puissant, mais aussi le plus complexe à configurer. CSP définit quelles sources sont autorisées à charger des scripts, des styles, des images et d'autres ressources. Commencez par
Content-Security-Policy-Report-Onlypour surveiller les violations sans casser votre site, puis durcissez progressivement la politique. Un point de départ minimal :Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;
Vous pouvez définir ces en-têtes dans votre fichier .htaccess (Apache), votre configuration Nginx, ou via une extension de sécurité WordPress. Si vous utilisez Cloudflare, vous pouvez également configurer la plupart d'entre eux sous Security > Settings.
Techniques de durcissement du cœur de WordPress
WordPress lui-même est bien maintenu et régulièrement corrigé, mais sa configuration par défaut laisse plusieurs portes ouvertes que vous devriez fermer délibérément.
- Maintenez à jour le cœur, les extensions et les thèmes WordPress : la majorité des piratages WordPress exploitent des vulnérabilités connues dans des logiciels obsolètes. Activez les mises à jour automatiques mineures (elles le sont par défaut) et vérifiez les mises à jour majeures au moins chaque semaine. Envisagez d'activer les mises à jour automatiques d'extensions pour les extensions de confiance.
- Supprimez complètement les extensions et thèmes inutilisés : désactiver une extension ne supprime pas son code de votre serveur. Un attaquant peut toujours exploiter les vulnérabilités des extensions désactivées. Supprimez tout ce que vous n'utilisez pas activement, et ne conservez qu'un seul thème par défaut comme solution de repli.
- Désactivez XML-RPC : l'interface XML-RPC (
/xmlrpc.php) a été conçue pour la publication à distance et les pingbacks. Aujourd'hui, elle est principalement utilisée pour les attaques d'amplification par force brute et les DDoS. À moins que vous n'en ayez besoin pour Jetpack ou l'application mobile WordPress, désactivez-la entièrement. Vous pouvez la bloquer au niveau du serveur :# Apache .htaccess <Files xmlrpc.php> Order Deny,Allow Deny from all </Files> - Restreignez le point d'accès utilisateurs de l'API REST : par défaut,
/wp-json/wp/v2/usersexpose les noms d'utilisateurs à tout le monde. Cela rend trivial pour les attaquants de découvrir des noms de connexion valides. Restreignez ce point d'accès aux requêtes authentifiées uniquement, soit avec une extension, soit avec un extrait de code personnalisé. - Bloquez l'énumération des utilisateurs via les archives d'auteur : même sans l'API REST, les attaquants peuvent découvrir des noms d'utilisateurs en demandant
/?author=1,/?author=2, etc. Bloquez cela en redirigeant les requêtes d'archives d'auteur ou en les désactivant entièrement si votre site n'en a pas besoin. - Supprimez le numéro de version de WordPress : WordPress affiche sa version dans une balise meta et dans les URL des fichiers CSS/JS du cœur. Bien que la sécurité par l'obscurité seule soit insuffisante, supprimer le numéro de version oblige les attaquants à sonder plutôt que de simplement rechercher les vulnérabilités connues pour votre version exacte.
- Sécurisez ou supprimez le fichier debug.log : lorsque
WP_DEBUG_LOGest activé, WordPress écrit les erreurs dans/wp-content/debug.log. Ce fichier peut contenir des requêtes de base de données, des chemins de fichiers, des erreurs d'extensions et d'autres informations utiles aux attaquants. Ne laissez jamais la journalisation de débogage activée en production, et si le fichier existe, supprimez-le ou bloquez-y l'accès. - Utilisez des mots de passe forts et uniques et activez l'authentification à deux facteurs : chaque compte WordPress devrait avoir un mot de passe d'au moins 16 caractères et unique à ce site. Ajoutez l'authentification à deux facteurs (2FA) avec une extension comme WP 2FA ou Wordfence Login Security. Cette seule mesure bloque pratiquement toutes les attaques par force brute.
- Limitez les tentatives de connexion : WordPress permet un nombre illimité de tentatives de connexion par défaut. Utilisez une extension comme Limit Login Attempts Reloaded pour bloquer les adresses IP après quelques essais infructueux, ou utilisez un pare-feu d'application web (WAF) qui inclut la protection contre la force brute.
- Changez le préfixe de table de base de données par défaut : WordPress utilise
wp_comme préfixe de table par défaut. Le changer pour quelque chose d'unique lors de l'installation rend les attaques d'injection SQL automatisées légèrement plus difficiles. Si votre site est déjà en ligne, vous pouvez toujours le modifier, mais sauvegardez d'abord votre base de données.
Permissions de fichiers WordPress et sécurité du serveur
Les permissions de fichiers déterminent qui peut lire, écrire et exécuter des fichiers sur votre serveur. Des permissions incorrectes constituent l'une des erreurs de configuration de sécurité les plus courantes.
- Définissez les bonnes permissions de fichiers : utilisez 644 pour les fichiers et 755 pour les répertoires. Le fichier
wp-config.phpdoit être réglé sur 600 ou 640 dans la plupart des environnements d'hébergement. N'utilisez jamais 777, qui donne un accès complet en lecture/écriture/exécution à tout le monde. - Protégez wp-config.php contre l'accès web : ce fichier contient vos identifiants de base de données, vos clés d'authentification et vos sels. Sur Apache, ajoutez ceci à
.htaccess:
Certains guides de sécurité suggèrent de déplacer<Files wp-config.php> Order Allow,Deny Deny from all </Files>wp-config.phpun répertoire au-dessus de la racine web. Cela fonctionne sur la plupart des configurations mais peut causer des problèmes avec certains hébergeurs. - Désactivez l'éditeur de fichiers intégré : WordPress inclut un éditeur de fichiers dans le panneau d'administration qui permet aux administrateurs de modifier directement les fichiers de thème et d'extension. Si un attaquant obtient un accès administrateur, cet éditeur lui donne la possibilité d'injecter du code malveillant dans n'importe quel fichier PHP. Désactivez-le en ajoutant cette ligne à
wp-config.php:define('DISALLOW_FILE_EDIT', true); - Bloquez l'accès aux fichiers sensibles : des fichiers comme
readme.html,license.txtetwp-config-sample.phprévèlent des informations sur votre version et configuration WordPress. Bloquez l'accès public à ceux-ci via la configuration de votre serveur. - Désactivez la navigation dans les répertoires : si la liste des répertoires est activée, n'importe qui peut parcourir votre dossier
/wp-content/uploads/et voir tous les fichiers que vous avez téléchargés. Désactivez-la en ajoutantOptions -Indexesà votre.htaccess.
Stratégie de sauvegarde WordPress et planification de récupération
Aucune configuration de sécurité n'est complète sans une stratégie de sauvegarde fiable. Si le pire se produit, une sauvegarde récente fait la différence entre un désagrément mineur et une perte totale.
- Automatisez les sauvegardes quotidiennes : utilisez une extension comme UpdraftPlus, BlogVault ou BackWPup pour effectuer des sauvegardes automatiques selon un calendrier. Au minimum, sauvegardez quotidiennement. Les sites à fort trafic ou les boutiques WooCommerce devraient envisager des sauvegardes en temps réel.
- Stockez les sauvegardes hors site : conservez des copies sur un service distant comme Amazon S3, Google Cloud Storage ou Dropbox. Si votre serveur est compromis, les sauvegardes locales peuvent également être affectées.
- Testez votre processus de restauration : une sauvegarde que vous n'avez jamais testée est une sauvegarde à laquelle vous ne pouvez pas faire confiance. Restaurez votre sauvegarde dans un environnement de préproduction au moins une fois par trimestre pour confirmer qu'elle fonctionne.
- Conservez plusieurs générations de sauvegardes : maintenez au moins 30 jours de sauvegardes quotidiennes. Certaines infections passent inaperçues pendant des semaines, vous avez donc besoin de pouvoir revenir à un état connu propre.
Surveillance continue de la sécurité pour WordPress
La sécurité n'est pas un projet ponctuel. De nouvelles vulnérabilités sont découvertes régulièrement, et la configuration de votre site peut dériver au fil du temps à mesure que des extensions sont ajoutées ou que les paramètres changent.
- Installez une extension de sécurité : Wordfence, Sucuri ou NinjaFirewall fournissent une protection en temps réel incluant des règles de pare-feu, l'analyse des logiciels malveillants et la sécurité de connexion. Choisissez-en une (pas plusieurs, car elles peuvent entrer en conflit) et configurez ses alertes.
- Mettez en place des analyses InspectWP automatisées : planifiez des analyses régulières pour surveiller votre posture de sécurité au fil du temps. InspectWP vous alertera des nouveaux problèmes comme les en-têtes manquants, les journaux de débogage exposés ou les fuites de numéro de version dès qu'ils apparaissent.
- Activez les notifications de mise à jour : assurez-vous que WordPress vous envoie des notifications par e-mail lorsque des mises à jour du cœur, des extensions ou des thèmes sont disponibles. Les correctifs de sécurité doivent souvent être appliqués dans les heures suivant leur publication pour devancer les exploits automatisés.
- Examinez régulièrement les comptes utilisateurs : supprimez les comptes inactifs, en particulier ceux ayant des rôles d'administrateur ou d'éditeur. Auditez votre liste d'utilisateurs au moins mensuellement, et révoquez immédiatement l'accès à toute personne qui n'en a plus besoin.
- Surveillez vos journaux d'accès : vérifiez les journaux de votre serveur pour détecter des modèles inhabituels, comme des requêtes répétées vers
/wp-login.php,/xmlrpc.php, ou des chemins inexistants. De nombreuses extensions de sécurité fournissent une vue de journal simplifiée.
Vérifiez la sécurité de votre WordPress avec InspectWP
Lancez une analyse InspectWP complète pour vérifier tous les éléments liés à la sécurité en une seule fois. La section sécurité couvre la configuration SSL, les en-têtes de sécurité HTTP, l'exposition de la version WordPress, l'énumération des utilisateurs via l'API REST, l'accessibilité du journal de débogage et plus encore. Mettez en place des analyses automatiques pour recevoir des notifications chaque fois que votre posture de sécurité change, afin que vous puissiez résoudre les nouveaux problèmes avant qu'ils ne soient exploités.