Comment faire une désinfection WordPress sans perdre vos contenus
Une désinfection WordPress qui se passe “sans perdre vos contenus” n’est pas une question de chance. C’est une suite de décisions, prises au bon moment, avec une méthode qui protège la base de données, les médias, et la structure du site. Quand un site est compromis, on a souvent deux urgences qui s’opposent: nettoyer vite pour stopper la compromission, et vérifier avec soin pour ne pas supprimer par erreur des pages, des images, ou des réglages qui ne sont pas la cause du problème.
Dans cet article, je déroule une approche réaliste, celle que j’ai vue fonctionner sur des cas très variés: redirections invisibles, scripts injectés dans les fichiers, thèmes ou plugins qui deviennent des portes dérobées, sites qui chargent des chargeurs depuis des domaines tiers, ou encore des tâches cron malveillantes. L’objectif est simple: désinfecter, restaurer la confiance, et garder un historique récupérable au moindre doute.
Comprendre ce que vous devez vraiment protégerAvant de toucher à WordPress, il faut définir ce qui compte pour vous, et ce qui peut être reconstruit sans douleur.
Dans la majorité des incidents, votre contenu “métier” se trouve dans deux endroits:
La base de données: articles, pages, catégories, tags, champs, commentaires, réglages WordPress, et une partie des données de plugins. Le répertoire uploads: images, PDF, vidéos, documents, miniatures.Le reste est “reconfigurable” plus facilement: thèmes, plugins, fichiers du noyau, caches, certains fichiers de configuration. Cela ne veut pas dire que vous pouvez effacer sans réflexion, mais ça change l’ordre des priorités.
Quand on se précipite sur “réinstaller WordPress”, https://gardewp.fr/ on risque d’écraser accidentellement des fichiers spécifiques à votre hébergement (par exemple wp-config.php), de perdre des configurations de plugins si elles sont stockées dans des fichiers plutôt que dans la base, ou de supprimer des répertoires utilisés par un builder visuel. Et surtout, on peut désinfecter superficiellement, puis laisser en place un plugin compromis qui continue à réinjecter du code.
La règle que j’applique presque systématiquement: tant que vous n’avez pas une copie de travail fiable, vous ne “nettoyez” pas, vous “préparez” le nettoyage.
La toute première étape: faire une copie exploitable, pas juste “un backup quelque part”Beaucoup de gens disent “j’ai un backup”. Souvent, il s’agit d’une sauvegarde automatique que personne n’a vérifiée depuis des semaines, ou d’une archive incomplète (excluant la base de données), ou d’un point de restauration inutilisable car le fichier a été écrasé.
Votre copie de travail doit couvrir ce qui fait courir le risque. Pour rester concret, prévoyez une sauvegarde qui inclut au minimum base de données et fichiers WordPress, et idéalement un export complémentaire de vos contenus.
Voici le minimum que je conseille de cocher avant d’attaquer le nettoyage:
Sauvegarde des fichiers WordPress, y compris wp-content (thèmes, plugins) et uploads Sauvegarde de la base de données (dump SQL ou équivalent) Vérification que la sauvegarde est restaurable (au moins une extraction test ou un contrôle de taille et de cohérence) Si possible, export WordPress via Outils (contenu) ou sauvegarde d’un export WP, pour un plan B “contenu” Relevé des paramètres critiques, notamment wp-config.php et toute configuration de votre hébergeur liée au domaine, au cache, et à PHPLe point “restaurable” paraît bureaucratique. En pratique, c’est souvent là que se fait la différence entre un incident récupéré proprement et une restauration à moitié impossible.
Si vous êtes sur un VPS ou un hébergement géré, la copie peut passer par un outil de l’hébergeur, cPanel, un snapshot, ou un plugin. Le principe reste le même: vous voulez un état que vous pouvez réinstaller rapidement, pour ne pas dépendre de votre intuition pendant une enquête.
Mettre le site en pause pour limiter la casseQuand un site est compromis, la page infectée peut encore être alimentée en contenu malveillant, ou l’attaquant peut continuer à modifier des fichiers. En paralysant le site de façon contrôlée, vous gagnez du temps, vous réduisez les risques pour vos visiteurs, et vous évitez de “cacher le crime” en écrasant les traces.
Selon votre contexte, “mettre en pause” peut vouloir dire:
une mise en maintenance propre (fichier .maintenance, plugin de maintenance, ou règle proxy), un blocage temporaire des requêtes sortantes au niveau serveur (si vous avez cette capacité), ou un arrêt du trafic vers le WordPress exposé (par exemple via un reverse proxy).Évitez simplement de supprimer tout le site ou de changer brutalement la config réseau. Ce qui est utile, c’est une fenêtre d’investigation où vous conservez la possibilité d’observer les fichiers modifiés, et où les visiteurs ne reçoivent plus le code injecté.
Identifier le vecteur: code injecté, plugin, thème, ou configurationDésinfecter sans perdre vos contenus, ça veut dire: traiter la cause, pas seulement les symptômes. La difficulté, c’est que les symptômes ressemblent parfois à des problèmes “légitimes” (thème cassé, plugin qui bug, cache qui se mélange, redirection vers une page 404, formulaire qui disparaît).
Sur WordPress, les compromissions suivent souvent des schémas. J’ai vu le plus fréquent se classer en grandes familles:
1) Fichiers modifiés ou injectésParfois, le noyau WordPress ou des fichiers directement au-dessus (wp-config.php, fichiers root, includes) contiennent un fragment ajouté. Cela peut être très discret.
2) Plugin ou thème compromisUn plugin “gratuit” ou un thème “custom” peut contenir un code qui s’exécute à chaque chargement. Dans certains cas, seul un fichier précis a été modifié, dans d’autres, toute une arborescence a été ajoutée.
3) Base de données altéréeLe contenu des pages est parfois modifié, ou des options WordPress sont changées. Des injections peuvent aussi être stockées dans des champs, ou dans des scripts internes.
4) Tâches cron et mécanismes d’exécutionDes cron malveillantes peuvent réécrire des fichiers ou injecter du contenu même après une reinstallation.
La bonne désinfection dépend du vecteur. Si vous réinstallez tout sans traiter le cron, le problème revient. Si vous nettoyez uniquement les fichiers visibles, mais que les options en base gardent une redirection, vous aurez une rechute.
Inspecter sans toucher au contenu: une enquête orientée “diff” et “marqueurs”L’approche la plus sûre que j’ai utilisée consiste à comparer, avant modification. L’idée n’est pas de “tout lire”, mais de repérer ce qui a changé par rapport à un état attendu.
Si vous avez accès à un historique via votre hébergeur, un snapshot, ou au moins à une copie propre des fichiers (par exemple un WordPress standard du même version), vous pouvez:
repérer des fichiers nouvellement créés dans wp-content, analyser les dates de modification, détecter des fragments suspects dans des fichiers PHP, vérifier les options liées aux redirections ou aux “scripts” stockés.La plupart du temps, la compromission laisse des signatures. Elles peuvent être codées, compressées, encodées en base64, ou masquées dans des conditions. Vous n’avez pas besoin de comprendre chaque caractère, vous avez besoin de reconnaître un comportement non attendu, puis d’éliminer la source.
Un point important: ne supprimez pas d’un coup les fichiers “qui vous https://gardewp.fr/nettoyage-malware-wordpress/ semblent bizarres” si vous n’êtes pas certain qu’ils ne contiennent pas votre contenu. Par exemple, certains builders ou plugins de mise en page stockent des données dans des fichiers spécifiques ou appellent des templates. C’est là que la sauvegarde et la restauration testée prennent tout leur sens.
La désinfection WordPress: stratégie “réinstaller le code, nettoyer la cause, préserver les contenus”Une méthode qui limite le risque de perdre les contenus consiste à distinguer code et contenus.
Votre plan général, sans inventer d’étapes inutiles, peut ressembler à ceci dans l’esprit:
Remplacer le code WordPress (et idéalement thèmes et plugins) par des versions connues, propres, vérifiées. Nettoyer les fichiers malveillants restés dans wp-content. Vérifier la base de données pour éliminer les injections, options modifiées, et structures qui contiennent le code. Contrôler les déclencheurs côté serveur comme cron et comptes utilisateurs. Réactiver uniquement après tests contrôlés.Le piège, c’est de faire “remplacement du code” en écrasant tout wp-content, puis de découvrir que vos images ont disparu, ou que votre thème custom n’était pas dans la copie que vous avez remplacée.
Le bon compromis: remplacer ce qui est “standard et remplaçable”, protéger ce qui est “contenu et configuration”.
En pratique, si vous n’avez pas la certitude que vos thèmes et plugins sont sains, les retirer et les réinstaller depuis des sources officielles est souvent plus sûr que de “patcher” à l’aveugle.

Le noyau WordPress: oui, réinstallez-le. C’est un composant que vous pouvez récupérer proprement. Il contient peu de contenu métier.
Wp-config.php: ne le réécrivez pas sans vérifier. C’est lui qui relie WordPress à la base et définit des clés. Une erreur ici, et vous pouvez casser le site plus que le malware ne l’a fait.
Uploads: gardez-les. Sauf cas où un fichier téléchargé est lui-même la source de l’infection. Dans ces cas, la désinfection peut nécessiter de nettoyer des médias ou de bloquer l’exécution de certains types. Mais dans l’immense majorité des compromissions, les images et documents ne sont pas la cause principale. C’est souvent du code PHP injecté.
Thèmes: si vous avez un thème custom, la question se complique. Si c’est un thème de tiers, vous pouvez le remplacer par une version propre. Pour un thème custom, vous pouvez reconstruire en repartant d’une version saine, ou restaurer depuis git si vous l’avez suivi. Sinon, vous pouvez faire un examen ciblé des fichiers modifiés. Ce choix dépend du niveau de confiance dans votre thème.
Plugins: si un plugin est suspect ou inconnu, le supprimer et réinstaller proprement est le chemin le plus sûr. Quand on garde un plugin compromis “juste au cas où” et qu’il continue à s’exécuter, on se retrouve à désinfecter en boucle.
Nettoyer la base de données sans effacer vos pagesC’est souvent là que les gens perdent du temps ou du contenu. Ils se disent “la base est compromise” et tentent une suppression brute de tables ou d’entrées. Selon le scénario, ça peut casser des relations ou supprimer des contenus réels.
Une approche pragmatique consiste à cibler ce qui a été modifié, ou ce qui stocke du code exécutable.
Sans prétendre à une liste universelle de tables à effacer, j’observe généralement des altérations dans:
options WordPress liées à des paramètres de site, contenus “posts” ou “pages” qui contiennent des scripts inattendus, champs de plugins (par exemple champs optionnels, shortcodes, ou métadonnées), tables de caches ou de transients qui peuvent contenir des redirections, même si le code source est ailleurs.Ce que je recommande, c’est de travailler avec un dump de la base, et de faire des modifications en local si vous avez la capacité. Si vous devez agir en production, faites-le sur une copie restaurée, puis testez.
Pour préserver vos contenus, le principe reste: ne supprimez jamais des pages ou des articles parce qu’ils “contiennent quelque chose” sans comprendre où et pourquoi. Parfois, le code malveillant est injecté dans un champ texte d’un plugin ou dans un bloc. Le supprimer peut être trivial, alors que supprimer tout l’article serait disproportionné.
Vérifier utilisateurs, rôles et mots de passeUn site WordPress compromis, c’est souvent aussi un accès. Même si le code malveillant est supprimé, l’attaquant peut conserver un compte administrateur, ou un compte avec des droits élevés.
C’est pour cela que la désinfection WordPress ne se limite pas à “nettoyer les fichiers”. Vous devez aussi:
vérifier la liste des utilisateurs, supprimer ceux qui n’ont pas de raison d’être là, réinitialiser tous les mots de passe d’administrateurs, et idéalement ceux des utilisateurs à privilèges, contrôler les mécanismes d’authentification, comme la présence de nouveaux systèmes de connexion additionnels.Il y a un détail que je prends toujours le temps de vérifier: les comptes “fantômes” peuvent avoir été créés avec un rôle particulier, et la personne légitime n’a même pas connaissance de leur existence tant que le site ne se comporte pas anormalement.
Contrôler cron, tâches planifiées et exécutions automatiquesLes tâches planifiées sont un grand classique. Elles peuvent, par exemple, recompiler du code, importer un contenu, ou modifier des fichiers à chaque exécution.
Le piège, c’est la fausse sensation de victoire: vous remplacez des fichiers, tout semble propre pendant quelques heures, puis le site réinfectionne.
Si vous avez accès au système, vérifiez:
les cron côté serveur, les cron côté WordPress (souvent géré via wp-cron), les plugins qui ajoutent des tâches.Là encore, la bonne méthode est d’observer d’abord, corriger ensuite, et tester avant de repasser en mode “normal”.
Durcir après désinfection: éviter la rechute sans casser vos routinesUne fois le site nettoyé, vous ne voulez pas juste “tenir la semaine”. Les compromissions se répètent souvent quand le point d’entrée n’a pas été corrigé: mot de passe faible, plugin obsolète, thème abandonné, absence de limitation sur les tentatives de connexion, ou configuration serveur trop permissive.
Il est tentant d’activer des protections lourdes d’un coup. En production, cela peut créer des faux positifs, bloquer votre formulaire, casser un flux, ou empêcher des tâches légitimes.
Le mieux est de durcir progressivement, en gardant un œil sur vos plugins et sur votre espace de travail.
Voici un exemple de mesures généralement pertinentes, à adapter à votre environnement, sans entrer dans un guide “tout ou rien”:
mettre à jour WordPress, thèmes et plugins, ou supprimer ce qui n’est plus utilisé activer une limitation de tentatives de connexion sur la partie login renforcer les mots de passe et activer l’authentification à deux facteurs pour les comptes sensibles contrôler les permissions et limiter l’exécution de fichiers non nécessaires revoir les réglages de sécurité d’hébergement (WAF, règles de filtrage, headers, gestion du cache)Je précise ce point car j’ai déjà vu des WAF trop stricts bloquer des endpoints d’un plugin d’abonnement, ou casser une intégration de paiement. La désinfection réussie n’est pas seulement “plus propre”, c’est “plus stable”.
Vérifications finales avant de remettre le site en ligneQuand le site est “restauré”, ce n’est pas fini. Vous devez vérifier que:
le code injecté ne se réactive pas, vos pages s’affichent correctement, les contenus restent intacts, les formulaires et liens importants fonctionnent.Sur un site WordPress, les tests les plus rentables sont ceux qui confrontent votre site aux usages réels: navigation, pages critiques, formulaires, recherche, et accès admin.
Avant de repasser en ligne, je fais aussi un contrôle des fichiers modifiés et des permissions. Ça peut sembler répétitif, mais c’est la différence entre “ça marche” et “ça va tenir”.
Voici une petite séquence de vérification utile, simple, sans transformer l’intervention en marathon:
Tester la navigation sur les pages clés, y compris mobile si vous en avez un trafic significatif Vérifier le login admin et au moins un profil utilisateur non admin Contrôler le fonctionnement des formulaires et des intégrations (newsletter, paiement, webhooks) Inspecter rapidement wp-content et les fichiers récemment changés pour s’assurer qu’aucun script “ne revient” Vérifier les redirections et le code source des pages pour détecter les comportements persistantsCette liste ne remplace pas une analyse complète, mais elle évite l’erreur la plus courante: remettre en ligne alors qu’un composant encore infecté n’a pas encore eu l’occasion de se manifester.
Cas fréquents qui font perdre du contenu (et comment les éviter) “Je réinstalle tout, et après je récupère les médias”Ça se transforme souvent en chantier. Sans dire que c’est impossible, ça augmente le risque de perdre la correspondance entre anciennes URL, nouvelles structures, et tailles de vignettes. Les permaliens, les liens internes, et les caches peuvent aussi diverger.
Si vous gardez uploads et que vous remplacez seulement ce qui doit l’être, vous réduisez drastiquement le risque.
“Je supprime les plugins suspects, mais mon contenu dépendait d’eux”Certains plugins stockent des blocs, des shortcodes, ou des métadonnées interprétées dans vos pages. Supprimer un plugin peut ne pas supprimer vos pages, mais peut rendre certains contenus invisibles ou cassés.
Le bon réflexe est de tester après chaque retrait, et si possible de remplacer le plugin par une version saine avant de déclarer victoire.
“Je répare la base en supprimant des lignes”Si vous regardez un champ et qu’il contient du code inattendu, il peut sembler logique de supprimer toute la ligne. Mais si cette ligne contient aussi des paramètres utiles, vous perdez potentiellement des options, ou pire des blocs de contenu.
La désinfection doit être ciblée. Quand vous doutez, faites une restauration à partir de la sauvegarde de travail, modifiez sur une copie, puis comparez.
Maintenir un journal de ce que vous changezUn détail qui paraît “organisationnel”, mais qui évite des pertes de contenu: notez ce que vous faites, même brièvement. Date, étape, fichiers touchés, plugins désactivés, options modifiées.
Quand un incident se poursuit sur plusieurs jours, ou quand vous devez repasser en arrière, ce journal devient une boussole. Il vous empêche d’oublier une action qui explique pourquoi un comportement revient.
C’est particulièrement vrai si vous travaillez en équipe, ou si vous devez confier une partie à quelqu’un d’autre. Sans traces, vous finissez par refaire deux fois la même désinfection.
Ce que vous pouvez attendre d’une désinfection propreUne désinfection WordPress réussie n’est pas uniquement “un site qui ne renvoie plus de spam”. Elle se mesure aussi à la stabilité:
le site ne réinforme pas les visiteurs, le thème et les plugins se chargent sans comportement étrange, les pages importantes sont toujours accessibles, vos contenus restent cohérents, et la reprise de contrôle sur la sécurité est réelle, pas temporaire.Le signe que vous avez bien protégé le contenu, c’est que vous pouvez naviguer dans vos pages comme d’habitude, vérifier vos images, vos médias, vos blocs, et vos formulaires, sans découvrir que la structure de votre site a été “nettoyée” trop agressivement.
Si vous êtes bloqué: comment décider entre réparer et restaurerParfois, l’analyse montre trop d’éléments suspects, trop de fichiers modifiés, et une base difficile à sécuriser proprement. Dans ce cas, restaurer depuis une sauvegarde antérieure peut être plus efficace que de patcher au cas par cas.
La décision dépend de deux facteurs:
à quel point votre sauvegarde est récente et fiable, à quel point vous êtes certain que la restauration ne ramènera pas le point d’entrée.Si vous restaurez, vous devez aussi traiter ce qui a permis l’accès. Sinon, vous avez juste remis à plat, puis re-déclenché le même incident.
Dernière règle: testez toujours sur une copie avant de déclarer “tout bon”C’est le fil rouge de la méthode pour “ne pas perdre vos contenus”. Une désinfection WordPress solide se fait avec une copie de travail, des tests, et des retours en arrière possibles.
Quand vous n’avez pas de copie, vous jouez aux devinettes. Quand vous avez une copie, vous pouvez observer, modifier, valider, puis seulement ensuite revenir en production.
Vous économisez du temps. Vous perdez moins de contenu. Et surtout, vous reprenez le contrôle de votre site avec un minimum de stress et une méthode défendable.
Si vous me décrivez votre situation (type d’incident, plugins installés, si vous avez une sauvegarde récente, et ce que vous observez côté redirections ou code source), je peux vous proposer une démarche plus ciblée, avec les points à vérifier en priorité pour préserver vos contenus.