Hardening WordPress : checklist complète pour sécuriser votre site

Sécuriser WordPress, ce n’est pas empiler des plugins “anti tout”. C’est traiter votre site comme un service exposé, avec une surface d’attaque réelle, des dépendances vivantes et des habitudes d’exploitation qui comptent autant que la technique. J’ai vu des sites “propres” être compromis après une simple négligence sur l’accès admin, et des installations “moyennes” résister parce que les bases étaient béton: mises à jour suivies, droits maîtrisés, sauvegardes testées et journalisation utile.

Le hardening WordPress, c’est donc un travail continu, mais structurable. L’objectif est simple: réduire les chances d’entrée, limiter l’impact quand quelque chose échappe, et accélérer la reprise.

Cartographier ce qui doit être protégé

Avant de verrouiller, il faut comprendre. Sur un WordPress, la sécurité ne se limite pas à “le login”. Les vrais points sensibles sont souvent distribués: le serveur web, la base de données, le système de fichiers, le thème, les plugins, les rôles, et la façon dont vous déployez vos modifications.

Commencez par dresser une carte mentale des flux:

    Qui se connecte au site, et avec quel rôle? Quelles personnes touchent aux plugins, aux thèmes, aux réglages? Où sont stockées vos sauvegardes, et qui y a accès? Le serveur sort-il sur Internet pour mettre à jour, recevoir des mises à jour, envoyer des webhooks? Vos formulaires exposent-ils des points d’entrée, même “sous contrôle” (contact, inscription, commentaires)?

Une fois cette carte en tête, vous pouvez décider. Par exemple, renforcer brutalement un système de fichiers peut casser un outil de déploiement. Bloquer des requêtes trop agressivement peut casser le chargement d’images ou certaines API de plugins. Le hardening efficace est celui qui protège sans rendre le site fragile.

Mettre à niveau: le premier verrou qui tient

Le point le plus simple, et paradoxalement le plus souvent négligé, c’est la cohérence des versions. WordPress, PHP, MySQL ou MariaDB, thèmes et plugins: tout se tient.

Sur les attaques courantes, une partie du travail consiste à chercher des vulnérabilités connues dans des composants précis. Si vous êtes à jour, vous réduisez mécaniquement l’espace disponible pour l’attaquant.

Quelques règles pratiques:

    Gardez WordPress et PHP compatibles. Une montée de version PHP est une bonne mesure de sécurité, mais testez sur staging si vous le pouvez. Certains plugins plus anciens ne supportent pas bien des PHP récents, et vous risquez une panne plutôt qu’une amélioration. Tenez à jour les plugins “à risque”. Tous ne se valent pas: un plugin de galerie ou de cache peut être moins exposé qu’un plugin qui gère l’inscription, des formulaires, ou des intégrations. Évitez les installations “zombies”: plugins désactivés mais toujours présents, thèmes qui ne servent pas, extensions abandonnées.

Quand on me demande par où commencer, je réponds souvent “la mise à jour”, puis “la réduction des privilèges”, puis “la sauvegarde testée”. Sans sauvegarde testée, les mises à jour de sécurité peuvent devenir un pari.

Comptes, rôles et accès: là où tout se joue

WordPress gère l’accès via des rôles. Le hardening passe donc par la gouvernance des comptes.

image

Le scénario typique que j’ai vu plusieurs fois: un compte admin avec un mot de passe réutilisé ailleurs. Le pirate teste des identifiants, obtient un accès, puis déploie une modification discrète: ajout d’un utilisateur “silencieux”, changement de thème, ou injection dans un fichier “pour plus tard”.

Réduisez la zone de décision:

    Limitez le nombre de comptes ayant des droits élevés. Évitez les connexions partagées. Forcez des mots de passe uniques et longs. Supervisez l’accès distant (si votre hébergeur propose une console, limitez qui peut l’utiliser). Regardez les comptes inactifs. S’ils n’ont plus de raison d’exister, ils deviennent un risque.

Le contrôle peut aussi s’appuyer sur des signaux. Par exemple, si vous voyez des connexions échouées répétées sur le wp-admin, c’est souvent le même pattern de brute force. Un journal d’accès exploitable vous aide à distinguer un pic de légitime (campagne marketing, test d’intégration) d’une tentative malveillante.

Authentification renforcée: le saut de qualité

Une des mesures les plus rentables est d’ajouter une authentification forte pour l’accès à wp-admin. Le détail compte: une simple “protection anti brute force” aide, mais elle ne remplace pas l’ajout d’un second facteur, surtout quand les mots de passe sont exposés par des fuites externes.

Selon votre configuration, vous pouvez:

    Utiliser un plugin d’authentification à double facteur. Ou, si votre hébergeur le permet, activer une couche d’authentification au niveau du reverse proxy ou du panneau d’administration. Dans des environnements plus maîtrisés, configurer SSO ou restrictions IP sur les accès sensibles.

Il y a un compromis à accepter: ajouter du second facteur demande une discipline opérationnelle. Les jours où l’équipe change, ou quand un utilisateur perd son appareil, vous devez avoir un plan de récupération. Sinon, la sécurité devient un risque de blocage interne.

Sécuriser wp-admin et limiter le bruit

Beaucoup de tentatives n’ont pas pour objectif de “casser” WordPress de suite. Elles cherchent plutôt à trouver une porte ouverte. Le bruit est utile en soi: il renseigne sur l’activité, mais vous ne voulez pas qu’elle devienne un canal d’usure.

Sans noyer le site, vous pouvez durcir l’accès à wp-admin, par exemple avec:

    Une protection côté serveur contre les requêtes répétées. Un filtrage des attaques évidentes (User-Agent incohérents, comportement de scan). Des règles de limitation de taux, appliquées avec discernement.

Attention aux faux positifs. Si vous avez une équipe distante avec des connexions variables (VPN, mobile, réseau d’entreprise), des limitations trop strictes peuvent vous verrouiller vous-même. Le bon réglage se fait généralement sur une période d’observation, pas en “mode strict” dès le premier jour.

Vérifier et durcir les thèmes et plugins

WordPress est une plateforme extensible. Cette extensibilité est une force, mais aussi une dette technique.

Le hardening WordPress efficace commence souvent par le ménage:

    Gardez uniquement les plugins nécessaires. Retirez les plugins obsolètes. Évaluez la provenance des extensions. Un plugin bien maintenu, avec un historique de correctifs, est moins risqué qu’un projet abandonné.

Dans la pratique, je conseille aussi de regarder la logique de sécurité au niveau des plugins. Certains plugins exécutent du code ou exposent des endpoints sensibles. Un formulaire d’inscription mal configuré peut servir d’entrée. Un plugin de cache mal réglé peut empêcher certaines protections de fonctionner correctement. Et un plugin “tuning” qui modifie les fichiers système peut créer des surprises après une mise à jour.

image

Si vous devez autoriser des modifications de code, faites-le dans un cadre contrôlé: staging, revue, déploiement reproductible. L’objectif est de réduire la différence entre ce qui a été testé et ce qui tourne en production.

Exposition du fichier: uploads, permissions et exécution

La plupart des compromissions passent par des fichiers. Même quand l’attaque commence ailleurs, elle finit souvent sur l’écriture ou la modification de contenu dans des endroits prévisibles: wp-content/uploads, caches, ou des fichiers temporaires.

Deux principes:

Les fichiers uploadés ne doivent pas être exécutables. Les permissions doivent être cohérentes avec l’exploitation, sans ouvrir des droits excessifs.

Selon votre hébergeur et votre configuration, des réglages sur le serveur peuvent empêcher l’exécution dans les répertoires d’upload. Vérifiez aussi les permissions des fichiers WordPress. Trop ouverts, ils facilitent la modification non autorisée. Trop stricts, ils empêchent la maintenance.

Un exemple concret: j’ai déjà vu une installation où un script de déploiement ne pouvait plus écrire dans https://gardewp.fr/securite-wordpress/ wp-content à cause d’un “hardening” agressif. Le site finissait par rester en état semi-cassé, et l’équipe activait alors un contournement temporaire, souvent trop permissif. C’est pour ça que le durcissement doit être accompagné d’un ajustement des processus.

Base de données: protéger ce que WordPress touche en continu

La base de données reçoit des requêtes en permanence. WordPress y stocke utilisateurs, options et contenus. Une faille ici est grave.

Sans entrer dans une liste exhaustive, retenez:

    Protégez le serveur de base de données au niveau réseau. Limitez l’accès depuis l’extérieur, et restreignez aux services nécessaires. Utilisez des identifiants de base de données solides, pas réutilisés. Séparez les environnements. Un “dev” accessible depuis le public est un vecteur d’attaque en plus.

La partie la moins glamour, c’est la gestion des identifiants et des accès. Pourtant, dans les incidents, c’est souvent là qu’on constate des habitudes trop simples: mêmes mots de passe partout, accès trop large, absence de rotation.

Journalisation, détection et preuves: votre meilleure assurance

Un système sécurisé, c’est aussi un système observable. Si vous n’avez pas de logs exploitables, vous découvrirez l’incident trop tard, avec des options limitées.

Visez des journaux utiles:

    Tentatives de connexion, y compris les échecs. Changements d’utilisateurs. Édition de fichiers ou de templates. Modifications de thèmes et plugins. Erreurs applicatives qui signalent des comportements anormaux.

Il est tentant de vouloir tout logger, puis de ne rien analyser. Mieux vaut logger moins, mais avec un format exploitable, et un processus d’examen. Par exemple, une revue quotidienne sur les signaux forts (changements d’admin, élévation de privilèges) peut faire gagner des heures en cas d’incident.

Sauvegardes: pas seulement “exister”, mais “fonctionner”

Une bonne sauvegarde, c’est celle que vous pouvez restaurer. C’est une phrase simple, mais elle change tout.

Testez la restauration au moins une fois. Une sauvegarde non testée est une promesse, pas une protection. Et pendant une restauration, vous ne pouvez pas compter sur “ça ira”.

Le bon sens opérationnel:

    Sauvegardez fichiers et base de données. Vérifiez le chiffrement ou au minimum l’accès contrôlé. Conservez des versions, pas seulement la dernière. Assurez-vous que la restauration est possible dans un délai raisonnable.

Sur des sites à fort trafic, le “temps de retour” devient une métrique. Un incident n’est pas seulement une compromission, c’est aussi une interruption. Et une restauration mal planifiée peut transformer un incident d’accès en incident de disponibilité.

Checklist pratique avant de toucher au durcissement

Pour passer de l’idée à l’action, voici une checklist courte, utile pour cadrer un premier tour de durcissement. Elle ne remplace pas une démarche complète, mais elle évite les trous évidents.

    Mettre à jour WordPress, PHP et les plugins majeurs, en testant sur staging si possible Réduire le nombre de comptes admin, supprimer les comptes inutiles, et imposer des mots de passe uniques Activer une authentification forte pour wp-admin et vérifier le plan de récupération Vérifier les permissions des répertoires, surtout wp-content/uploads, pour éviter l’exécution des fichiers uploadés Mettre en place des sauvegardes chiffrées, puis tester une restauration sur un environnement de préproduction

Si une seule ligne vous manque, commencez par celle-là. La sécurité est plus solide quand elle est complète, pas quand elle est brillante sur un point.

Durcir sans casser: les pièges courants

Le durcissement peut dégrader l’expérience si on applique des règles “au hasard”. Voici des erreurs que j’ai vues revenir, parfois après des conseils pris trop au pied de la lettre:

Bloquer des IP ou des routes sans comprendre comment les services externes se connectent. Restreindre trop sévèrement les requêtes vers l’admin, et empêcher l’équipe de travailler. Supprimer des plugins de sécurité ou de cache qui assurent des garde-fous indirects. Modifier des fichiers système sans suivi, ce qui complique les mises à jour. Désactiver des fonctions utiles sans comprendre les impacts sur des formulaires, des plugins d’API, ou des webhooks.

Le compromis est toujours le même: plus on verrouille, plus il faut maîtriser. Si votre organisation n’est pas prête à surveiller et ajuster, vous devez choisir une approche progressive.

Cas réels: comment les attaques démarrent et ce que vous devriez exiger

Les attaques sur WordPress prennent souvent une forme répétable. Elles exploitent une faiblesse simple ou un enchaînement.

Un cas classique: brute force sur wp-login, puis prise de contrôle. Un autre: compromission via plugin, où le pirate injecte une charge utile puis se cache dans un recoin discret. Le plus difficile à détecter, ce sont les modifications qui “continuent de fonctionner” tout en ouvrant une porte.

Ce que vous pouvez exiger en interne, c’est un niveau de contrôle sur les changements:

    Qui a le droit d’installer ou d’éditer des plugins? Comment les déploiements sont-ils validés? Comment gérez-vous les urgences, quand un plugin casse quelque chose mais ne présente pas de risque immédiat? Avez-vous une procédure pour repérer ce qui a changé entre deux dates?

Quand vous avez une hygiène de changement, l’investigation devient plus rapide. Vous ne cherchez plus “au hasard”. Vous recoupez les périodes et les modifications.

La sécurité du thème et des customizations

La plupart des sites ont des personnalisations: thème enfant, fragments de code, shortcodes maison, fonctions ajoutées dans le thème ou parfois dans le thème parent.

Le point d’attention: les customizations sont souvent le talon d’Achille. Un ajout rapide pour “faire fonctionner” quelque chose peut ouvrir une surface. Une fonction qui désactive des contrôles, un endpoint oublié, ou une mauvaise validation des entrées côté serveur peuvent suffire.

Une pratique saine consiste à:

    Favoriser le thème enfant pour les modifications. Éviter les hacks qui modifient des fichiers core ou des templates sans suivi. Documenter les raisons des modifications, au moins pour l’équipe qui maintient le site.

Et surtout, traiter tout nouvel ajout comme un morceau de code à sécuriser, pas comme une “petite ligne”. Sur WordPress, une petite ligne peut faire une grande différence.

Hardening WordPress en mode serveur: le niveau qui manque souvent

Beaucoup d’articles parlent de plugins, mais oublient que WordPress tourne sur un serveur. Selon votre hébergeur, vous pouvez appliquer des protections au niveau web server, firewall ou reverse proxy.

On parle de choses comme:

    Contrôles sur l’accès aux chemins sensibles. Configuration des headers de sécurité. Réduction des informations exposées par le serveur. Gestion des erreurs et des pages d’index.

Je ne donne pas de recette unique, car chaque stack a ses contraintes. Mais l’idée générale reste: si vous pouvez faire une partie du travail au niveau serveur, vous gagnez en robustesse et vous limitez la dépendance à des extensions.

Un plan de maintenance réaliste (et tenable)

La sécurité échoue souvent parce qu’elle n’est pas tenue. Vous n’avez pas besoin d’un processus lourd, mais vous avez besoin d’un rythme.

Voici un cadre simple, adapté aux équipes qui maintiennent des sites sans équipe sécurité dédiée. Il faut juste accepter que la discipline prime sur la perfection.

    Revue mensuelle des mises à jour et des extensions installées, avec suppression des inactives Vérification des journaux sur les signaux forts, en gardant un œil sur les accès admin Audit trimestriel des comptes et des rôles, suppression des accès inutiles Re-test de restauration des sauvegardes à une fréquence compatible avec votre niveau de changement Vérification après chaque incident ou changement majeur, même si “tout va bien”

Le rythme exact dépend du trafic, de la criticité et de la fréquence de déploiement. Sur un site brochure, vous pouvez allonger certains intervalles. Sur un site e-commerce ou un intranet public, vous devez resserrer.

Dernière couche: vérifier la santé du site et l’intégrité

Une fois les mesures en place, l’étape trop souvent négligée consiste à vérifier l’intégrité et la cohérence.

Ce que vous cherchez:

    Un utilisateur admin ajouté sans raison. Un thème ou un plugin modifié alors qu’il n’y a pas eu de déploiement. Des fichiers nouveaux dans des zones inattendues. Des comportements bizarres: redirections, liens injectés, formulaires qui ajoutent des champs.

Sans promettre une “détection magique”, vous pouvez exploiter la logique: si quelque chose change sans processus de changement, c’est suspect. Les outils d’audit ou de scan peuvent aider, mais leur valeur dépend de votre capacité à interpréter. Quand les alertes sont ignorées, l’outil finit par devenir un bruit de fond.

Ce que je recommande pour commencer dès aujourd’hui

Si vous ne savez pas par où attaquer, faites-le dans cet ordre. Pas parce que c’est une règle absolue, mais parce que c’est généralement là que les incidents trouvent leur origine:

D’abord, verrouillez l’accès admin, ajoutez une authentification forte et limitez les comptes. Ensuite, mettez à jour ce qui doit l’être et retirez ce qui ne sert plus. Puis, assurez les sauvegardes testées. Enfin, rendez le système observable avec des journaux exploitables.

La sécurité n’est pas une photo, c’est une trajectoire. Un site WordPress se renforce à mesure que vous réduisez la surface d’attaque, contrôlez les changements et préparez la reprise.

Si vous appliquez ces principes, vous obtenez un niveau de protection solide, pas seulement “une configuration défensive”. Et surtout, vous gagnez une chose rare: la capacité de répondre vite quand quelque chose dérape.