Un site WordPress “qui tourne” n’est pas forcément un site WordPress “qui résiste”. Entre les thèmes premium mal tenus, les plugins abandonnés, les comptes administrateurs créés par réflexe et les paramètres par défaut jamais revus, la surface d’attaque grandit en silence. Le hardening, ce n’est pas une couche cosmétique, c’est une façon de réduire le nombre de chemins possibles vers une compromission, puis de rendre les mauvais chemins moins utiles.
Quand on pilote un WordPress à l’échelle d’une équipe, d’une agence ou d’un site à enjeux (lead gen, e-commerce, intranet), on cherche un compromis lucide: diminuer les risques sans casser la production, et garder un niveau de contrôle exploitable au quotidien. Voilà comment je raisonne, avec des décisions concrètes, des pièges fréquents et une méthode qui respecte la réalité des hébergeurs, des mainteneurs et des calendriers.
Partir de la notion de surface d’attaque
La surface d’attaque, c’est tout ce qui peut recevoir une requête, interpréter une entrée utilisateur, exposer une donnée ou déclencher un comportement. Sur WordPress, cela inclut:
- le navigateur côté public (pages, formulaires, REST API), le serveur (exécution PHP, permissions de fichiers, configuration web), l’écosystème applicatif (core, thèmes, plugins, dépendances), l’espace d’administration (connexions, rôles, sessions, mots de passe), et même les “outils autour” (sauvegardes, CDN, emails de reset, logs).
Le hardening consiste à supprimer ce qui n’est pas nécessaire, verrouiller ce qui doit rester, et surveiller ce qui s’exprime malgré tout. Le piège, c’est de vouloir “tout verrouiller”. À un moment, le site devient fragile, difficile à déboguer, et personne n’a envie de le maintenir. On vise donc une réduction progressive, mesurée.
Un exemple vécu: sur un site pro, on a découvert des endpoints REST activés sans raison et des plugins qui ajoutaient des routes custom. Aucun exploit connu, mais l’exposition augmentait la probabilité d’une erreur logique, ou d’une fuite de données via un paramètre mal validé. Une fois les routes inutiles désactivées et le nombre de plugins réduit, le risque a baissé, sans toucher au fonctionnement public.
La discipline des versions: core, thèmes, plugins
Le premier levier reste classique, mais il est rarement bien appliqué: mises à jour. Ce n’est pas seulement pour “avoir la dernière feature”. Les correctifs corrigent souvent des vulnérabilités qui exploitent des comportements existants, et qui deviennent “faciles” dès que l’équipe a laissé une version en place trop longtemps.
En pratique, le hardening passe par un rythme réaliste:
- mettre à jour le core quand c’est raisonnable, traiter les plugins au cas par cas, et garder des thèmes stables, si possible limités à ce qui est maîtrisé.
Le second levier est la discipline du “moins”. Sur beaucoup de sites WordPress professionnels, la liste des plugins finit par ressembler à un patchwork. Or, chaque plugin est un morceau de code qui peut introduire une faille, une mauvaise configuration, ou juste une surface additionnelle (shortcodes, formulaires, AJAX, REST, webhooks, import/export).
Mon règle de terrain: si un plugin n’est pas utilisé depuis plusieurs semaines et qu’il ne sert pas un besoin clair, il n’est pas “en attente”, il est candidat à la suppression. La suppression est parfois plus sûre que de le laisser “au cas où”.
Droits et permissions: là où l’erreur coûte cher
Sur le serveur, l’objectif est simple: WordPress doit pouvoir lire ce dont il a besoin, et écrire uniquement ce qui est nécessaire. Trop de permissions, c’est comme laisser une porte ouverte à une pièce où vous stockez des papiers sensibles.
Concrètement, je regarde trois choses:
La propriété des fichiers (qui peut modifier quoi), Les permissions par type de répertoire (uploads, caches, thèmes), Et la configuration d’exécution PHP (ne pas exécuter PHP là où ce n’est pas attendu).Sur des hébergeurs mutualisés, l’accès à certains réglages est limité, mais on peut déjà réduire le risque via une logique de permissions cohérente. Si votre plateforme propose des mécanismes de “gestion des permissions”, utilisez-les. Sinon, on évite les bricolages hasardeux, car les permissions mal calibrées cassent le site ou rendent l’audit inutile.
Le cas des uploads
Les uploads WordPress, c’est souvent le point le plus sensible. Même si WordPress n’exécute pas directement des fichiers “dans uploads” selon la configuration, une mauvaise règle web server, ou une extension autorisée, peut créer un scénario inattendu. Je traite les uploads comme une zone non fiable: on limite ce qui peut y être stocké, on contrôle les types de fichiers, et on s’assure que l’exécution de code y est empêchée.

Configuration web: désactiver ce qui ne sert pas
Une grosse partie du hardening se joue dans l’interface web server et les règles de réécriture. La logique la plus utile consiste à empêcher l’accès à ce qui n’est pas censé être public, et à réduire les possibilités de navigation vers des fichiers sensibles.
Sans entrer dans des recettes universelles (car chaque environnement diffère), je privilégie des actions qui ont un bon rapport effet effort:
- limiter l’accès à des répertoires système, empêcher lister certains contenus, éviter d’exposer des informations inutiles dans les réponses HTTP, et vérifier que la version PHP et certaines en-têtes ne révèlent pas trop.
Sur un site où l’on avait conservé une vieille configuration de répertoires, des chemins typiques de fichiers internes étaient accessibles. On a corrigé la règle d’accès, et les scans automatisés ont cessé de “voir” des surfaces évidentes. Ce n’est pas glamour, mais c’est efficace.
Comptes, sessions, rôles: verrouiller l’humain
Les vulnérabilités techniques deviennent des compromissions surtout quand des comptes faibles existent. Sur un WordPress pro, la gestion des rôles est un levier majeur. Le hardening ici consiste à réduire le nombre de comptes ayant des capacités élevées, et à améliorer l’authentification.
Trois réalités:
- les équipes changent, et des comptes restent “là par habitude”, les mots de passe réutilisés survivent longtemps, et un administrateur “accès complet” est souvent inutile.
Je recommande une approche pragmatique: audit des utilisateurs, suppression ou rétrogradation de ce qui n’est pas requis, et renforcement de l’authentification. L’authentification forte peut être mise en place avec un outil compatible avec votre stack, idéalement sans ajouter une charge mentale énorme aux mainteneurs.
Réinitialisation de mot de passe et emails
Le mécanisme de reset de mot de passe est utile, configuration sécurité WordPress mais il est aussi une surface. Si un attaquant tente massivement des resets, il peut provoquer du bruit, des tentatives d’ingénierie sociale et parfois des effets de bord. J’accorde donc une attention particulière aux logs d’auth, à la surveillance des événements, et au contrôle des messages envoyés.
Limiter l’exposition: REST API, XML-RPC et endpoints inutiles
WordPress propose des endpoints. Certains sont nécessaires pour des fonctionnalités (mobile apps, intégrations, webhooks), d’autres non. Quand une fonctionnalité n’est pas utilisée, la meilleure mesure de sécurité consiste souvent à la réduire ou à la fermer.
Le couple REST API et XML-RPC revient souvent dans les audits. L’API REST peut rester utile, mais pas forcément dans tous les cas. XML-RPC, lui, est une cible classique d’attaques de brute force. La décision de désactivation dépend de votre usage réel (applications externes, intégrations, compatibilité avec certains outils). Ici, je fais toujours un petit travail d’inventaire avant de “casser” une intégration invisible.
Une anecdote rapide: sur un site vitrine, on a désactivé XML-RPC. Tout semblait OK, puis un plugin d’import automatique a cessé de fonctionner. Le diagnostic a montré que l’outil utilisait ce canal pour certaines synchronisations. La correction a été simple, mais elle rappelle l’essentiel: le hardening doit respecter les dépendances, même celles qu’on croit “absentes”.
Sécurité applicative: validation, formulaires, et plugins “gratuits”
Beaucoup d’incidents WordPress viennent moins d’une attaque “magique” que d’une faille de validation côté serveur. Un plugin qui envoie des données à une route, un formulaire sans contrôle, un mécanisme d’import mal protégé, et la surface s’ouvre.
Même si WordPress lui-même est solide, la diversité des plugins rend l’écosystème hétérogène. Une stratégie que j’utilise pour un WordPress professionnel: limiter l’installation à des plugins bien maintenus, réduire leur nombre, et surveiller les changements.

Je ne dis pas qu’un plugin gratuit est automatiquement dangereux. En revanche, la maintenance est le vrai signal. Quand un plugin n’a pas évolué depuis longtemps, ou qu’il accumule des avis contradictoires sans réponse des auteurs, c’est un indicateur de risque. Le bon geste est d’avoir une politique interne: si un plugin ne reçoit pas de correctifs sur une période raisonnable, on planifie une alternative.
Journaux, supervision et réponse: la sécurité sans visibilité est une promesse
Le hardening ne s’arrête pas au blocage. Sans logs exploitables, vous réagissez à l’aveugle. Pour un site WordPress pro, j’attends au minimum:
- des traces d’authentification (tentatives, échecs, verrouillages), des logs d’erreurs PHP et applicatifs, et un suivi des événements d’administration (changements de rôles, mise à jour de plugins, modifications de fichiers).
Sur des hébergeurs modernes, on peut accéder à des logs via l’interface, mais l’idéal est un mécanisme centralisé si vous gérez plusieurs sites. Au minimum, je recommande de documenter où se trouvent les logs et comment y accéder rapidement, surtout quand quelqu’un de l’équipe n’a pas l’habitude.
Un point important: trop de logs brutaux peuvent noyer l’équipe. Le bon hardening inclut une stratégie de filtrage, pour éviter que les signaux se perdent dans le bruit. Je privilégie aussi des alertes sur les événements “qui ne devraient pas arriver souvent”.
Un plan d’action réaliste (et pas une liste de vœux)
Voici la séquence que j’utilise le plus souvent pour un audit hardening, quand le site est vivant et qu’on veut réduire le risque sans immobiliser l’activité.
- Faire l’inventaire des plugins et supprimer ceux qui ne servent plus (en commençant par les modules “d’ajout” faciles à remplacer). Vérifier les rôles et comptes admin: réduire le nombre de comptes à ceux qui en ont besoin, puis renforcer l’authentification. Revoir les paramètres d’accès, notamment les endpoints non nécessaires, et valider le comportement après changement. Durcir l’environnement serveur sur les permissions et l’exécution PHP, en tenant compte des limites de votre hébergeur. Mettre en place une supervision des logs et un processus de réponse (qui vérifie, quand, et comment).
Cette approche ressemble à une suite d’actions simples, mais elle fonctionne parce que chaque étape produit un résultat vérifiable, et parce que vous gardez une trace de ce qui a été modifié.
Trade-offs: quand le durcissement casse quelque chose
Le hardening a un coût. Il peut ralentir des workflows, compliquer le support, ou introduire des cas limites. Quelques exemples typiques:
- Désactiver un endpoint peut casser une intégration externe, même si vous ne l’utilisez pas tous les jours. Restreindre les permissions de fichiers peut empêcher des mises à jour automatiques ou des opérations d’écriture. Exiger une authentification forte peut créer une friction, surtout lors des changements d’équipe. Réduire les types de fichiers autorisés peut bloquer un usage légitime, par exemple des documents spécifiques attendus par les équipes marketing.
La bonne attitude est d’accepter une phase de validation. Je planifie toujours une fenêtre de test quand une modification impacte la sécurité ou la connectivité externe. Sur un WordPress pro, une panne coûte vite plus cher qu’un risque résiduel gérable, donc on ajuste.
Exposition indirecte: thèmes, code custom, et pages “public”
Un thème WordPress n’est pas un simple habillage. Il peut contenir des shortcodes, des formulaires, des hooks, des appels AJAX, des scripts front. Le code custom ajoute encore une couche. Le hardening, dans ce contexte, implique un principe de base: le code custom doit être audité comme n’importe quel code serveur.
Sur des sites “anciens”, on trouve parfois des fragments ajoutés via le thème ou un plugin maison: un shortcode qui affiche des données internes, un endpoint non protégé, ou une logique de récupération d’informations depuis l’extérieur. Ce sont des surfaces d’attaque très concrètes, mais parfois invisibles aux yeux du marketing ou des créateurs de contenus.
Je conseille de tenir un registre simple des modifications custom: qui a écrit quoi, pourquoi, quand, et comment le rollback est possible. En cas d’incident, ce registre devient un accélérateur de diagnostic.
Gestion du stockage: sauvegardes, restauration et test
Les sauvegardes ne réduisent pas directement la surface d’attaque, mais elles réduisent la conséquence d’un incident. Un hardening sérieux intègre un test de restauration. Sans test, une sauvegarde est une supposition.
Le piège courant: sauvegarder “par habitude” sans vérifier que la restauration fonctionne, ni que les données retrouvent leur configuration (base de données, options, permaliens, configurations de cache). Pour un WordPress pro, je considère la restauration test comme un exercice de réduction du risque, au même titre que les verrouillages.
Une pratique utile: conserver un plan clair de restauration, y compris les étapes de vérification après retour en ligne. Par exemple, après restauration, on valide que les plugins requis sont présents, que les versions attendues correspondent à l’état sécurisé, et qu’aucun compte ne s’est “recréé” avec des droits trop élevés.
Durcir sans dégrader l’exploitation: le bon équilibre
Réduire la surface d’attaque ne veut pas dire rendre WordPress hermétique. Cela veut dire rendre l’attaque coûteuse, imprécise, et répétitivement infructueuse. Dans les environnements pros, je vois une différence entre deux approches:
- Verrouiller sans comprendre, ce qui crée des pannes et des contournements. Verrouiller avec une logique, ce qui crée un système stable, surveillable, et modifiable avec méthode.
Un signe que l’équilibre est bon: l’équipe peut déployer un changement “standard” sans devoir réactiver des protections à la main, ni ouvrir des brèches temporaires. Les brèches temporaires deviennent souvent permanentes, parce que personne ne revient dessus.
Quelques contrôles simples, mais décisifs
Je termine avec une série de contrôles qui reviennent dans presque tous les audits WordPress, parce qu’ils sont rapides, visibles et révélateurs.
- Vérifier que la page de connexion n’est pas exposée à des accès non contrôlés (et que les tentatives échouées sont surveillées). Contrôler les fichiers sensibles et les accès aux répertoires, selon votre configuration web server. S’assurer que les plugins inutiles sont supprimés, pas seulement désactivés. Revoir les règles autour des uploads, en particulier l’exécution de code et les types autorisés. Vérifier que le processus de mise à jour et de restauration est documenté et testable.
Ces points ne remplacent pas une stratégie complète, mais ils créent un socle. Sur un site WordPress professionnel, ce socle fait souvent la différence entre un incident “gérable” et un incident qui se propage.
Ce que je mesure après durcissement
Quand on fait du hardening, il faut pouvoir constater l’effet. Je ne parle pas uniquement de “moins d’attaques visibles”. Je regarde aussi:
- la stabilité du site après changements, la diminution des surfaces activées (moins d’extensions, moins d’endpoint exposés), la qualité des logs (capacité à comprendre ce qui s’est passé), et la rapidité de réponse en cas de souci.
Si vous constatez que l’équipe comprend mieux ce qui se passe, que les accès sont mieux cadrés, et que les modifications suivent un chemin clair, vous avez réellement réduit la surface d’attaque, au sens concret du terme.
Hardening, c’est donc un cycle, pas un événement. Une fois que la base est solide, vous pourrez durcir plus finement, ajouter des protections adaptées à vos intégrations, et garder un WordPress pro cohérent avec sa criticité. Et surtout, vous aurez moins de surprises, moins de temps perdu en “réparation”, et plus de confiance dans le système.