Quand on parle de sécurité WordPress, on imagine souvent le scénario classique: un plugin obsolète, un mot de passe trop simple, une règle de pare-feu mal réglée. La backdoor, elle, ressemble moins à une porte mal fermée qu’à une pièce supplémentaire glissée dans la maison, sans plan ni facture. Elle se branche à un endroit discret, elle attend, puis elle ouvre un chemin à distance quand elle juge le moment propice.
Le point délicat, c’est que “supprimer” ne veut pas dire “réparer”. Une backdoor peut être un fichier isolé, ou une mécanique complète: comptes créés, accès via un thème, une base de données modifiée, un cron noyé sous un nom banal, des scripts qui recréent la porte si on les efface. Dans la vraie vie, la question n’est donc pas uniquement “comment la retirer”, mais “comment s’assurer qu’on l’a retirée sans casser le site, et sans laisser un mécanisme de réinstallation”.
Je vous propose une approche pragmatique, orientée terrain, avec les étapes qui réduisent le risque d’erreur. L’idée centrale est simple: agir comme si vous alliez devoir prouver votre travail, pas seulement “nettoyer”.
Reconnaître ce qui n’est pas normal, sans tomber dans la chasse au sorcier
La plupart des backdoors WordPress ne crient pas. Elles se cachent dans des zones qui semblent pourtant légitimes: un dossier du thème, un fichier “compat.php”, un script qui ne se déclenche que sur un paramètre précis, une fonction qui ne tourne que lorsque certains en-têtes HTTP sont présents.
Le premier réflexe efficace consiste à regrouper des indices, plutôt que de lancer des suppressions à l’aveugle.
Sur un incident que j’ai vu récemment, le site n’était pas “défigurée” par un pirate, pas de page rouge, pas de pop-up criard. Les pages index semblaient normales. En revanche, les journaux applicatifs montraient un pic d’accès sur un endpoint qui n’avait aucune raison d’être exposé, et l’équipe d’exploitation voyait des requêtes à des fichiers qui n’apparaissaient pas dans le thème “officiel”. Le malware ne cherchait pas la visibilité, il cherchait la persistance.

Pour établir une base, je regarde généralement:
- Les logs web et PHP, sur une fenêtre de temps cohérente avec le début présumé de l’infection. Les dates comptent plus que l’impression. Les fichiers modifiés récemment (mtime) dans wp-content, mais aussi dans wp-includes si vous voyez des changements “improbables”. La présence d’utilisateurs nouveaux, surtout ceux avec des rôles élevés, et les tentatives de connexion depuis des IP bizarres. Les modifications “fantômes” de la base: options qui ajoutent des hooks, cron jobs injectés, ou tables avec du contenu inattendu.
Ce travail de recoupement évite un piège fréquent: effacer un fichier “suspect” qui en réalité n’est pas la backdoor, puis ignorer un mécanisme ailleurs. Pire, on peut aussi supprimer un morceau indispensable au site et passer plusieurs jours à redresser ce que l’on vient de casser.
Comprendre le cycle de vie d’une backdoor WordPress
Une backdoor moderne suit souvent un cycle très répétitif.
D’abord, elle cherche l’escalade. Elle tente d’obtenir une exécution de code au bon endroit, par exemple via un fichier PHP importé dynamiquement, ou via une configuration qui charge un code non standard depuis wp-content. Ensuite, elle installe la persistance. C’est le moment où elle crée un compte administrateur, injecte un cron, modifie un fichier de plugin, ou place un loader qui réécrit les éléments supprimables.
Enfin, elle se met en attente. Beaucoup de backdoors ne font rien pendant des heures, afin d’échapper aux analyses automatisées et aux scans “prompt”. Elles se réveillent quand elles reçoivent un schéma de requêtes précis: une requête avec un paramètre caché, une séquence dans le body, ou un User-Agent “attendu”.
Cette logique explique pourquoi la “suppression” ne suffit pas si la backdoor a un mécanisme de régénération. Il faut la casser à la source, et idéalement empêcher sa réinstallation.
Préparer l’intervention: le nettoyage qui protège aussi votre production
Avant de toucher au site, il faut créer des conditions qui rendent l’opération sûre. Dans un contexte de sécurité WordPress, la prudence n’est pas un luxe, c’est ce qui évite les dégâts collatéraux.
La préparation que je privilégie est assez systématique, sans être lourde:
1) isoler le site si nécessaire (au moins bloquer l’accès public en écriture, selon votre niveau de risque) ; 2) sauvegarder les éléments potentiellement touchés (fichiers, puis base) ; 3) travailler d’abord sur une copie ou un environnement de test dès que c’est possible.
Le point qui surprend parfois les équipes, c’est que la sauvegarde ne sert pas seulement à “revenir en arrière” en cas d’erreur. Elle sert aussi à comparer, vérifier et identifier la modification initiale. Sans artefacts, on perd la capacité de prouver ce qui s’est passé, et la confiance revient beaucoup plus lentement.
Si votre site gère des paiements, des connexions, ou des données sensibles, je recommande franchement de faire la première analyse sur un clone. Même avec une équipe petite, le gain en sérénité est énorme.

Déterminer votre degré de certitude avant de supprimer
Si vous n’avez pas d’image complète de l’infection, vous devez arbitrer. Par expérience, deux scénarios reviennent souvent:
- Vous voyez une modification nette, très localisée, et votre version de base est facilement reconstituable (par exemple un thème largement standard, un plugin connu, et des fichiers ajoutés clairement identifiables). Dans ce cas, une suppression ciblée peut suffire. Vous observez des comportements distribués (plusieurs hooks modifiés, de nouveaux utilisateurs, des cron jobs invisibles, des changements dans plusieurs emplacements). Dans ce cas, le nettoyage “à la main” devient incertain. Une approche plus globale, type restauration contrôlée depuis une source fiable, est souvent plus sûre.
Il n’y a pas de honte à choisir la voie la plus robuste. La sécurité ne récompense pas le courage, elle récompense la méthode.
La méthode “à confiance”: bloquer, extraire, corriger, puis vérifier
Voici une séquence qui marche bien dans la majorité des cas, à condition de l’adapter à votre contexte.
Bloquez le vecteur d’entrée
Le but est de stopper les nouvelles exécutions pendant que vous nettoyez. Selon votre stack, cela peut passer par une mise en maintenance, un blocage temporaire des IP suspectes, ou une règle WAF qui filtre les routes et paramètres anormaux repérés dans les logs. Si vous avez un firewall applicatif, forcez-le à réagir pendant l’intervention, au lieu de laisser l’attaquant “respirer” pendant que vous travaillez.Sauvegardez et conservez les preuves
Faites une sauvegarde des fichiers et de la base, idéalement sur un support qui n’est pas accessible depuis le serveur web. Conservez aussi les exports d’utilisateurs, la liste des plugins, la sortie des tables de cron si vous les exportez, et des extraits des logs pertinents. Ce n’est pas du théâtre, c’est le filet de sécurité en cas de doute.Comparez avec une version de référence “propre”
L’étape la plus utile consiste à comparer wp-content (thèmes, plugins, uploads) et les fichiers PHP touchés avec une référence saine. Pour les plugins et thèmes, l’idéal est d’avoir vos versions exactes. Si vous n’avez que “la dernière version du plugin”, vous risquez de confondre un changement légitime (mise à jour) et une infection.Neutralisez la persistance avant de supprimer
Beaucoup de backdoors laissent un “loader” ou une routine qui recrée les fichiers. Avant de tout effacer, vérifiez la création de tâches planifiées, la présence de hooks inhabituels, et les comptes administrateurs ajoutés. Une fois que la persistance est cassée, vous pouvez retirer plus sereinement les fichiers.Vérifiez sur plusieurs axes après correction
La validation ne se limite pas à “le site s’affiche”. Testez des requêtes usuelles et des routes suspectes, relancez des scans locaux, vérifiez les comptes et le cron, et observez les logs pendant quelques heures. Une backdoor “silencieuse” peut attendre avant de se manifester.Cette séquence tient en une journée de travail pour un cas simple, mais elle est précieuse même si vous finissez par devoir restaurer entièrement.
Où chercher la backdoor concrètement, sans se perdre dans le volume
Quand on ouvre wp-content après un incident, on peut vite tomber dans une forêt de fichiers. La clé est de prioriser.
Je commence par les zones les plus fréquentes de modification:
- Thèmes et plugins: scripts ajoutés, fichiers PHP “dont on ne se sert pas”, chargements dynamiques depuis des chemins bizarres, appels à base64_decode ou eval dans des fichiers non attendus. Une backdoor se cache rarement dans un fichier “propre”, elle se glisse dans un coin. Uploads (wp-content/uploads): images transformées en vecteur via des fichiers camouflés, scripts déposés au milieu des médias. Le plus trompeur, c’est que tout ressemble à un upload normal jusqu’au moment où un fichier PHP mal nommé ou un stub s’exécute via un mécanisme spécifique. Fichiers de configuration et routines: wp-config.php ne devrait pas changer sans raison. Si vous voyez des modifications là, c’est un gros signal. Pareil pour des fichiers au niveau racine qui chargent des éléments additionnels. La base de données: options, postmeta, cron, et certains champs pouvant contenir du code ou des configurations de hooks. Si la backdoor ne réside que dans le code PHP mais qu’elle s’active via une donnée, vous pouvez effacer le fichier et voir revenir le problème.
Un détail pratique: si vous avez accès à un historique de déploiement (Git, CI, ou au moins des dates de mises à jour), vous pouvez réduire énormément la surface à vérifier. Dans les incidents que j’ai traités, le “moment” le plus utile est souvent celui où vous avez mis à jour un plugin, puis une heure plus tard vous avez observé des comportements anormaux. Ça ne prouve pas la cause, mais ça guide l’enquête.
Supprimer sans aggraver: erreurs classiques à éviter
https://gardewp.fr/securite-wordpress/Beaucoup d’équipes “font disparaître” des éléments, mais finissent par laisser des traces ou casser un mécanisme inattendu.
Voici les erreurs que je vois le plus souvent, et comment les prévenir:
D’abord, supprimer sans comprendre. Si un fichier a été ajouté, le supprimer est tentant. Pourtant, si la backdoor a aussi modifié des appels ailleurs, vous risquez d’avoir un site cassé. Dans ce cas, il faut d’abord identifier où l’exécution est déclenchée.
Ensuite, corriger uniquement côté fichiers. Certaines backdoors utilisent la base comme magasin de configuration. Si vous ne nettoyez pas les options et les cron jobs, vous supprimez peut-être la “face visible”, mais la backdoor continue de recréer son infrastructure.
Autre piège: remettre “au propre” des fichiers sans harmoniser les versions. Si vous copiez une version de thème depuis une machine différente, vous pouvez remettre un plugin obsolète ou une version différente, ce qui crée une nouvelle surface d’attaque. L’objectif n’est pas seulement de restaurer le site, mais de restaurer le site tel qu’il était, avec les mêmes versions, jusqu’au moment d’avant l’incident.
Enfin, croire que le scan antivirus ou un plugin de sécurité suffit. Ces outils aident, mais ils peuvent manquer un code conditionnel. Ils peuvent aussi signaler un faux positif. La validation finale doit rester liée au comportement et aux logs.
Nettoyage des comptes et des droits: le point de confiance
Une backdoor n’a pas forcément besoin de rester dans un fichier si elle a déjà obtenu un compte. Dans ce cas, supprimer les fichiers suspects n’élimine pas l’accès. Ce qui compte alors, c’est la réduction de la surface d’administration.
Je traite systématiquement ces éléments:
- Les comptes créés récemment, surtout avec des rôles élevés. Les tentatives de connexion qui ne correspondent pas à vos habitudes. Les intégrations, comme des comptes liés à des plugins d’accès ou de partage.
Sur certains sites, l’attaquant ne se contente pas de créer un compte, il modifie aussi les rôles ou ajoute des capacités via des hooks. Cela peut rendre une simple suppression de l’utilisateur insuffisante si l’on n’a pas aussi nettoyé la configuration.
Côté “confiance”, le bon indicateur est le suivant: après nettoyage, si vous changez les identifiants, forcez la reconnexion, et observez les journaux pendant un temps raisonnable, vous devez cesser de voir des essais anormaux.
Il y a une nuance importante: si vous avez un incident qui implique des identifiants compromis, il faut considérer que tous les secrets ont potentiellement fuité. Cela pousse à changer non seulement les mots de passe, mais aussi les clés, et parfois les tokens associés à des intégrations.
Validation technique: prouver que ça ne revient pas
Après avoir supprimé les fichiers suspects et nettoyé ce qui a été modifié, l’étape de vérification décide de la “confiance” du nettoyage.
Je ne me limite pas à un contrôle ponctuel. Je surveille. Les backdoors ont une patience qui dépasse souvent les sessions de travail.
La vérification se fait sur plusieurs axes:
- Requêtes: si vous avez repéré des endpoints ou des paramètres utilisés pendant l’attaque, testez-les et vérifiez qu’ils n’activent plus rien. Ne supposez pas que la disparition d’un fichier suffit si un endpoint dirige ailleurs. Cron: vérifiez l’absence de tâches inhabituelles. Si vous utilisez wp-cron, inspectez ce qui y tourne. Si vous utilisez un système externe (cron serveur), vérifiez aussi ses règles. Base: confirmez que les options et métadonnées modifiées ont disparu ou correspondent à l’état attendu. Authentification: vérifiez que seuls les comptes attendus existent et qu’ils n’ont pas changé de rôles. Logs: surveillez au moins quelques heures, parfois une journée, selon la fréquence d’activité de votre site.
Deux repères concrets qui rassurent
Voici deux observations simples que j’utilise comme “baromètre”. Elles ne garantissent pas à elles seules l’absence totale d’infection, mais elles réduisent nettement le doute.
- Si, après nettoyage et réactivation du site, les logs ne montrent plus de requêtes vers les chemins suspects que vous avez identifiés. Si les tâches planifiées et les comptes reviennent à un état cohérent, et restent stables pendant la surveillance.
Ce n’est pas spectaculaire, mais c’est ce qui tient dans le temps.
Quand restaurer depuis une source fiable devient la meilleure décision
Il y a un moment où la réparation “au fil des fichiers” devient un pari. Si vous voyez trop d’éléments incohérents, plusieurs zones modifiées, ou des mécanismes difficiles à reconstituer, restaurer depuis une source fiable est souvent plus sûr.
Sur des projets qui utilisent des déploiements contrôlés, restaurer revient à “reployer un état connu”, puis réappliquer les configurations légitimes. C’est généralement plus rapide que de chercher une aiguille dans un tas de code.
Cette décision dépend de votre maturité technique:
- Si vous avez un contrôle de version pour vos thèmes et plugins personnalisés, la restauration est plus simple. Si votre site est trop bricolé, sans versionning, la restauration devient plus risquée, car vous devrez reconstituer ce qui était “normal”. Si votre hébergement vous fournit des instantanés cohérents, vous pouvez gagner du temps, mais il faut quand même comprendre pourquoi la backdoor est apparue et comment empêcher sa réinstallation.
Restaurer ne dispense pas de la prévention. Sinon, vous répétez le cycle.
Renforcer après l’incident: la partie la moins glamour, mais la plus rentable
Une fois la backdoor supprimée, la vraie sécurité commence: rendre l’entrée plus difficile, limiter la persistance, réduire les dégâts.
Vous pouvez améliorer la sécurité WordPress sur plusieurs leviers, sans forcément transformer votre site en forteresse.
Je pense notamment à:
- Réduire les privilèges. Limitez les comptes administrateurs aux personnes qui doivent vraiment en avoir. Mettre en place une authentification forte pour l’accès à l’administration. Réviser les plugins installés, supprimer ceux qui ne servent pas, et corriger ceux qui datent. Verrouiller l’upload et la modification de fichiers selon vos besoins réels. Surveiller les changements dans wp-content, en particulier quand un système de déploiement est censé être le seul à toucher aux fichiers.
Le but est d’empêcher la prochaine backdoor de s’installer sans être remarquée, et de réduire les chances que l’attaquant trouve encore un point d’entrée.
Checklist terrain: ce que je fais avant de rendre le site “à nouveau normal”
Je termine avec une petite liste de vérifications, volontairement courte, parce que c’est précisément ce qui évite de se dire “on a l’air bon” alors qu’il reste un risque.
Vérifier qu’aucun nouvel utilisateur administrateur non attendu n’existe, et que les comptes ont été sécurisés (mots de passe changés, accès revus). Contrôler les cron jobs et l’absence de tâches inattendues. Comparer wp-content (thèmes, plugins, uploads) avec une référence saine ou un état validé. S’assurer que les fichiers de configuration n’ont pas été altérés sans justification. Surveiller les logs pendant une fenêtre cohérente, au moins quelques heures.Si ces points sont au vert, je considère que le nettoyage mérite la confiance, pas seulement l’optimisme.
Et si vous êtes déjà en mode “tout a été supprimé” mais que le doute persiste?
Parfois, le problème ne disparaît pas tout de suite. Les backdoors peuvent réagir après un délai, ou se réinstaller via un vecteur qui n’a pas été touché. Dans ce cas, la meilleure façon d’avancer est de ralentir et de recouper.
Je conseille alors de repartir des faits:
- Qu’est-ce qui déclenche le comportement suspect exactement? Les mêmes chemins sont-ils réutilisés après votre nettoyage? Les mêmes types de modifications apparaissent-ils dans les mêmes zones?
Une backdoor qui revient est une information. Elle vous dit où se trouve la persistance, même si elle n’est pas immédiatement visible.
Le chantier devient alors moins “suppression” et plus “contre-mécanique”.
Nettoyer une backdoor WordPress en confiance, c’est accepter que la sécurité est un processus, pas un clic. Vous gagnez quand vous traitez l’incident comme une enquête: preuves, recoupement, correction ciblée, puis validation par observation. Le site peut redevenir stable rapidement, mais la confiance, elle, se construit sur la durée, avec des tests concrets et des logs qui finissent par s’apaiser.