Supprimer malware WordPress : supprimer le spam dans la table wp_comments

Quand un site WordPress se fait polluer, on a souvent l’impression que l’infection vient de partout à la fois. En pratique, il suffit parfois d’un seul symptôme très visible: une avalanche de commentaires en attente, des messages qui semblent “humains”, des liens qui ne ressemblent à rien, et surtout une base de données qui grossit trop vite. Dans ces cas-là, la table wp_comments devient un indicateur. Le spam y apparaît en masse, souvent avec des champs cohérents entre eux, et parfois avec des traces plus inquiétantes.

Ce billet explique comment traiter ce problème de manière pragmatique, avec une démarche qui évite les erreurs classiques. L’objectif est double: supprimer le spam dans wp_comments, et vérifier si vous n’êtes pas en train de “nettoyer la surface” pendant que quelque chose d’autre continue de pousser de nouvelles entrées. Je parle bien de “supprimer malware WordPress” dans le sens large, car le spam peut n’être qu’un abus, mais il peut aussi être la conséquence d’un mécanisme compromis (formulaire de publication détourné, plugin vulnérable, compte valide réutilisé, ou requêtes automatisées qui ciblent votre installation).

Pourquoi le spam se retrouve dans wp_comments

WordPress stocke les commentaires dans la table wp_comments, puis les affiche selon leur statut. Quand le spam explose, vous observez généralement un de ces scénarios:

    le volume de lignes augmente très vite, parfois au rythme de plusieurs centaines par heure; les commentaires ont des comment_author et comment_content qui partagent des motifs (même style, mêmes domaines, mêmes expressions); beaucoup de commentaires passent directement en attente ou en “approved” selon vos réglages et la manière dont WordPress évalue le risque; la table devient lourde, vos requêtes “liste des commentaires” deviennent lentes, et la maintenance générale (sauvegardes, exports) se complique.

J’ai vu des sites où le spam “semblait” se limiter à wp_comments, mais où le trafic serveur montait anormalement, avec des appels répétés aux mêmes endpoints. À l’écran, on voit une forêt de commentaires. En coulisses, le site répond à une automatisation qui continue, et qui repopule la base dès que vous nettoyez.

Il faut donc raisonner en deux temps: nettoyer ce qui est déjà là, puis comprendre pourquoi ça revient.

D’abord, vérifier sans casser: sauvegarde et accès à la base

Avant d’exécuter la moindre requête de suppression, prenez l’habitude d’un protocole simple. J’insiste parce que la table wp_comments peut aussi contenir vos vrais commentaires. On ne “tape pas au hasard”.

1) Faites une sauvegarde complète. Idéalement, une sauvegarde base de données plus le dossier WordPress (au minimum wp-content). Une sauvegarde fonctionnelle vous évite de passer votre soirée à restaurer après coup.

2) Travaillez sur une copie si vous le pouvez. Certains hébergeurs proposent un “clone” de la base ou un environnement de test. Sinon, exportez au moins la table wp_comments avant nettoyage, même si c’est volumineux.

3) Connectez-vous avec un utilisateur qui a les droits nécessaires, et vérifiez le préfixe des tables. Par défaut, c’est wp_, mais beaucoup d’installations changent le préfixe pour réduire la visibilité.

Une fois que c’est prêt, vous pouvez observer la situation avec des requêtes de lecture.

Observer les statuts et le volume

Vous voulez rapidement répondre à trois questions: combien de commentaires “parasites” existent, quels statuts dominent, et comment ils ressemblent.

Un bon point de départ consiste à compter par comment_approved (valeurs souvent https://gardewp.fr/nettoyage-malware-wordpress/ utilisées: 0 pour en attente, 1 pour approuvé, ou d’autres valeurs selon configuration). Exemple, en adaptant le préfixe:

SELECT comment_approved, COUNT(*) AS total FROM wp_comments GROUP BY comment_approved ORDER BY total DESC;

Ensuite, regardez les auteurs et les domaines. Même sans connaître le pattern exact, cherchez des valeurs répétées. Par exemple:

SELECT comment_author, COUNT(*) AS total FROM wp_comments GROUP BY comment_author ORDER BY total DESC LIMIT 10;

Si vous repérez que comment_author ressemble à des “génériques” (noms inventés) et que le contenu contient toujours des URL vers les mêmes domaines, vous avez déjà une stratégie.

Cas fréquents: spam “en attente” versus spam “validé”

Le point qui change tout, c’est le statut des commentaires.

    Si la majorité est en attente (comment_approved = 0), vous pouvez souvent supprimer sans impact direct sur le contenu publié, puisque WordPress ne les affichera pas encore comme “validés”. Si vous constatez beaucoup de commentaires validés (comment_approved = 1 ou équivalent), là il faut être plus prudent. Un site compromis peut être en train de poster ou de valider automatiquement des commentaires, et le nettoyage de wp_comments risque de donner l’illusion que tout est réglé.

Dans ce dernier cas, je recommande de faire une inspection plus large: plugins récemment ajoutés, thème modifié, utilisateurs et rôles, et présence de scripts suspects dans wp-content. Ce billet se concentre sur wp_comments, mais l’idée reste la même: supprimer le spam, oui, mais aussi casser la mécanique qui le fabrique.

Comprendre le lien entre spam, formulaires et automatisation

Le spam de commentaires n’est pas toujours “malware” au sens strict. Souvent, c’est un bot qui:

    envoie des requêtes répétées au formulaire de commentaires; choisit de faux noms d’auteurs; injecte des liens et du texte aléatoire mais cohérent dans le style; tente parfois d’échapper aux filtres en jouant sur les champs.

Cependant, quand WordPress est compromis, l’attaque peut venir de plus loin: un plugin vulnérable peut permettre une exécution ou une modification, un compte peut être détourné, ou un script peut ajouter en base sans passer par l’interface. Le symptôme visible reste wp_comments, mais la cause ne se résume pas à “mettre un plugin anti-spam”.

C’est pour cela que la suppression ne doit pas être votre seule action. Une fois la base “nettoyée”, observez si de nouvelles lignes apparaissent à un rythme identique. Si oui, vous n’avez pas coupé le robinet.

Supprimer le spam dans wp_comments: approche prudente

L’approche la plus sûre consiste à supprimer un sous-ensemble basé sur des motifs vérifiables. Évitez la suppression “tous les commentaires” ou “tout ce qui est en attente” sans contrôle, surtout si votre site a une activité réelle et qu’un humain poste aussi en votre absence.

Le pattern de spam est souvent visible dans le contenu. Si vous trouvez un domaine, un préfixe d’URL ou une chaîne récurrente, vous pouvez cibler.

Ciblage par statut et contenu

Imaginons que vous ayez identifié un domaine comme example-spam.com dans comment_content. Vous pouvez alors supprimer uniquement les commentaires en attente dont le contenu contient ce domaine.

Exemple (à adapter):

DELETE FROM wp_comments WHERE comment_approved = '0' AND comment_content LIKE '%example-spam.com%';

Si vous préférez passer par la suppression sur les auteurs, c’est aussi possible, mais moins fiable si le bot change de nom. Dans ce cas, ciblez un contenu ou une URL, pas un champ “social”.

Si vous avez plutôt un motif unique dans comment_author_url ou un pattern dans comment_content, cherchez d’abord les lignes concernées, avec un SELECT avant le DELETE. Ça évite les mauvaises surprises.

SELECT comment_ID, comment_author, comment_date FROM wp_comments WHERE comment_approved = '0' AND comment_content LIKE '%example-spam.com%' LIMIT 20;

Une fois que vous confirmez que les résultats correspondent au spam attendu, vous pourrez supprimer.

Ciblage par ID sur une “fenêtre” de temps

Parfois, le spam a commencé à une date précise. Si vous avez un repère, vous pouvez supprimer uniquement ce qui tombe après un timestamp. Le champ comment_date est une date, souvent stockée au format compatible MySQL. Vous pouvez faire:

DELETE FROM wp_comments WHERE comment_date >= '2026-07-01' AND comment_approved = '0';

C’est pratique si vos vrais commentaires ne sont pas nombreux à cette période, ou si vous êtes sûr que l’activité humaine était faible. Sinon, c’est risqué.

Le bon compromis est souvent de combiner plusieurs critères, statut plus motif plus fenêtre de temps.

Réduire le risque: passer par des tests avant suppression

Je sais, ça rallonge la procédure. Mais sur un site réel, ça vous évite le scénario classique: vous supprimez des commentaires légitimes, puis vous passez des heures à expliquer à votre équipe pourquoi la discussion a disparu.

Voici la mini-discipline que j’applique dans ces cas, en quatre étapes.

    Faites un export ciblé de wp_comments (au moins les colonnes comment_ID, comment_post_ID, comment_author, comment_date, comment_content, comment_approved). Faites un SELECT avec le même WHERE que le DELETE et vérifiez sur quelques lignes. Déclenchez le DELETE en limitant le périmètre quand c’est possible (statut, date, motif). Surveillez ensuite si de nouvelles lignes apparaissent, et vérifiez que les vrais commentaires restent présents.

Vous pouvez aussi faire le “nettoyage” en plusieurs passes. Par exemple, supprimer un premier lot de domaines ou de patterns, attendre quelques minutes, puis recontrôler.

Attention à wp_commentmeta: le spam peut être ailleurs

Beaucoup de gens nettoient wp_comments et considèrent que c’est fini. Parfois, ce n’est pas suffisant. WordPress utilise aussi wp_commentmeta pour stocker des métadonnées liées à un commentaire. Un bot peut y laisser des indices, ou des traces de traitement.

Si vous voyez des entrées énormes dans wp_commentmeta, ou si certains plugins de spam y écrivent des valeurs, il peut être nécessaire de nettoyer aussi. La bonne nouvelle, c’est que, selon votre configuration et vos contraintes, supprimer les lignes dans wp_comments peut automatiquement supprimer les métadonnées liées, si des clés de relation et contraintes existent. Mais sur certaines bases, ce n’est pas garanti.

Une vérification simple consiste à compter avant et après nettoyage, ou à chercher l’existence de commentaires orphelins dans wp_commentmeta. Le détail dépend de votre schéma exact.

Quand le site repousse le spam: diagnostiquer la cause

Après suppression, si vous constatez de nouveaux commentaires quelques minutes plus tard, vous devez passer en mode diagnostic. La table wp_comments n’est que la destination.

Les causes les plus courantes que j’ai rencontrées, dans cet ordre de fréquence:

1) protection anti-spam insuffisante ou mal configurée 2) plugin de formulaire de commentaires vulnérable ou contourné 3) thème ou plugin modifié, même légèrement, avec une logique qui injecte en base 4) compte admin compromis, ou rôle escaladé 5) attaques de type “replay” qui continuent tant que l’IP ou le pattern n’est pas bloqué

Vous pouvez commencer par les changements récents. Si quelqu’un a mis à jour un plugin la veille, ou installé un nouvel outil, c’est un candidat plausible. Regardez les derniers logs d’erreur et d’accès côté serveur si vous y avez accès. Même quelques lignes vous donnent une idée du type de requêtes.

Côté WordPress, vérifiez les utilisateurs. Cherchez des comptes créés récemment, ou des rôles inattendus. Si vous voyez un utilisateur inconnu, vous ne gagnerez rien à supprimer uniquement des commentaires. Il faut rétablir la sécurité.

Renforcer la barrière avant de recommencer à nettoyer

Nettoyer un site infecté sans empêcher le retour, c’est comme vider une piscine sans vérifier la fuite. Le spam reviendra, parfois plus vite, parfois avec des patterns légèrement modifiés.

Vous n’êtes pas obligé d’empiler dix plugins. En général, un ensemble cohérent suffit: filtrage à l’entrée, durcissement des formulaires, et réduction des vecteurs d’attaque.

Voici les actions de durcissement que je privilégie, avec un ordre logique pour ne pas vous perdre.

    Activer une protection anti-spam fiable sur les commentaires, et vérifier les réglages de captcha, blocage des liens, et modération. Mettre à jour core WordPress et tous les plugins, surtout ceux liés au formulaire de commentaires, aux optimisations, et à la sécurité. Désactiver temporairement les plugins récemment ajoutés pour isoler le responsable si le spam continue après nettoyage. Bloquer au niveau serveur les IP évidentes ou les patterns récurrents, quand c’est possible via votre hébergeur. Vérifier les fichiers modifiés, en comparant avec une installation saine (au moins pour wp-content et les thèmes actifs).

Si vous faites cette partie correctement, votre nettoyage de wp_comments devient une opération ponctuelle, pas une corvée.

Une requête utile: nettoyer en ciblant un motif sans être trop agressif

Souvent, on n’a pas un seul domaine clair. On a plutôt des caractéristiques du contenu: présence de plusieurs URL, répétition d’un mot, ou longueur aberrante. Vous pouvez combiner plusieurs critères, sans être trop précis, pour éviter de toucher du contenu légitime.

Par exemple, si vous remarquez que le spam contient toujours au moins un préfixe d’URL, vous pouvez cibler:

image

DELETE FROM wp_comments WHERE comment_approved = '0' AND comment_content LIKE '%http%' AND comment_content LIKE '%tld%';

Le second LIKE doit correspondre à quelque chose de réel dans votre cas. Sinon, vous élargissez trop.

Un autre cas fréquent est la présence d’un HTML ou d’une signature particulière. Mais là encore, l’idée reste la même: valider le SELECT avant le DELETE.

Nettoyer sans vous enfermer: stratégie en “lots”

Si wp_comments est énorme, supprimer des milliers de lignes d’un coup peut être lent, et ça peut impacter le site. Selon votre base et votre hébergeur, vous pourriez dépasser des timeouts, ou voir le serveur MySQL saturer.

La stratégie en lots consiste à supprimer progressivement. MySQL ne supporte pas toujours un LIMIT direct sur DELETE selon la version et la configuration. Quand LIMIT n’est pas simple, on procède souvent en identifiant une plage d’IDs à chaque passe, ou en filtrant sur une date plus courte.

Par exemple, si le spam a commencé le mois dernier, vous pouvez supprimer d’abord un sous-intervalle, puis le reste. Ce n’est pas “plus rapide”, mais c’est plus fiable.

Vérifier le résultat côté WordPress

Après nettoyage, faites un contrôle côté interface. Regardez la page de commentaires, surtout les statuts. Ensuite, cherchez les pages où des commentaires devraient exister, si vous en aviez de légitimes.

Un point de vigilance: WordPress stocke aussi des mentions de commentaires dans certains écrans de modération. Si vous voyez des incohérences, c’est souvent lié à une suppression partielle ou à des métadonnées restées en place. D’où l’intérêt de tester sur un périmètre réduit au début.

Et si vous suspectez réellement un malware WordPress?

Le terme “malware” est utilisé large. Dans la pratique, vous devez distinguer:

    spam automatisé via un bot, sans compromission du site infection via plugin, thème, fichier modifié backdoor qui ajoute du contenu en base

Si vous voyez du spam en boucle alors que vous avez renforcé les protections et mis à jour les plugins, je considérerais le risque de compromission plus sérieusement. À ce moment-là, le nettoyage wp_comments devient un geste temporaire.

Signaux d’alerte qui justifient une investigation plus profonde: fichiers nouveaux ou modifiés dans wp-content, utilisateurs créés sans raison, cron jobs suspects, requêtes inhabituelles dans les logs.

Dans un environnement critique, je recommande de refaire une comparaison des fichiers avec une installation saine et de traiter la restauration avant de poursuivre le nettoyage de base.

Cas pratique: comment on “fait parler” les données

Je termine avec une méthode qui marche bien quand vous ne savez pas encore où est le pattern.

1) Vous commencez par observer la table: top auteurs, top contenus répétés, et répartition des statuts. 2) Vous repérez un ou deux motifs concrets: un domaine, une expression, ou une longueur atypique. 3) Vous lancez un SELECT avec votre futur WHERE sur un petit échantillon. 4) Seulement après validation, vous déclenchez le DELETE. 5) Vous observez ensuite si le rythme de création de nouveaux commentaires baisse.

Cette approche évite le réflexe de supprimer “tout ce qui est en attente”. Elle tient compte des compromis, parce que sur un site actif, vous ne voulez pas que la modération légitime disparaisse.

Et si votre objectif est vraiment de “supprimer malware WordPress”, cette méthode sert aussi à distinguer l’attaque actuelle du bruit résiduel. Quand la cause est cassée, les nouveaux commentaires se raréfient rapidement, et la table se stabilise.

Ce que vous pouvez retenir

Supprimer le spam dans wp_comments est une action utile, souvent nécessaire pour retrouver de la performance et calmer la modération. Mais c’est rarement une solution complète si la mécanique continue de tourner.

La bonne séquence, celle qui m’a le plus souvent fait gagner du temps, ressemble à ceci: sauvegarde, diagnostic rapide par requêtes de lecture, suppression ciblée et validée par un SELECT préalable, puis durcissement et vérification que le spam ne revient pas au même rythme. Si le retour persiste, vous passez de la chasse au contenu à la chasse à la cause.

Si vous voulez, dites-moi votre préfixe de table (par exemple wp_ ou autre), les statuts dominants observés dans comment_approved, et deux ou trois motifs concrets que vous voyez dans comment_author ou comment_content. Je pourrai vous proposer des requêtes de suppression plus ciblées, avec des garde-fous adaptés à votre situation.