Quand un site WordPress commence à “changer de comportement” sans explication, la tentation est de penser au piratage en premier. Souvent, c’est justifié. Mais dans beaucoup de cas, le vrai problème est moins spectaculaire: des requêtes automatisées, récurrentes, qui cherchent une faille, tentent des injections, testent des chemins d’URL, ou provoquent une surcharge qui ressemble à un malware côté navigation.
Sur un site, j’ai déjà vu un schéma typique: le trafic normal était stable, puis les logs ont commencé à enfler, à des heures régulières, avec des patterns similaires, parfois en rafales. La page d’accueil n’affichait pas forcément de contenu “défiguré”, pourtant le site devenait lent, certaines pages renvoyaient des erreurs, et l’outil de sécurité signalait des tentatives suspectes. Dans ces situations, supprimer malware WordPress ne suffit pas si les requêtes malveillantes continuent de marteler l’installation. Il faut traiter la source du bruit, nettoyer ce qui a été compromis, puis verrouiller les portes.
Le scénario réaliste: infection, ou attaque qui imite une infection
WordPress est robuste, mais il n’est pas immunisé contre les tentatives d’exploitation. Une demande malveillante peut déclencher plusieurs symptômes:
- tentative de connexion (faux formulaires, bruteforce, mots de passe courants) exploration de fichiers, recherche de endpoints connus essais de vulnérabilités via des paramètres d’URL spam de formulaires ou d’API pour fabriquer du contenu tentatives d’exécution via des chemins ou des fichiers uploadés
Un détail qui aide à trier les causes: le “malware silencieux” laisse souvent des traces précises dans les fichiers ou dans la base (nouveaux utilisateurs, plugin modifié, options ajoutées). À l’inverse, une vague d’attaques répétitives peut se voir surtout dans les logs serveur, avec des codes HTTP cohérents et une répétition presque mécanique.
Autre élément pratique: les hébergeurs montrent parfois des alertes de saturation (CPU, bande passante, pics de requêtes). Si vos pages deviennent lentes pile au moment où les logs explosent, vous êtes peut-être face à une attaque par requêtes, plus qu’à une modification durable du site.
Les “requêtes récurrentes” dans les logs: comment les reconnaître
Sans tomber dans la chasse aux fantômes, les logs vous parlent vite si vous savez quoi regarder. La récurrence se voit rarement dans une seule ligne. Elle apparaît par groupes: mêmes user agents, mêmes chemins, même structure de requête, mêmes paramètres, parfois même séquence d’erreurs.
Voici les indicateurs qui reviennent le plus souvent lorsqu’il s’agit d’un automatisme malveillant:
- répétition de mêmes URLs sur de courtes périodes, par exemple toutes les 5 ou 10 minutes codes HTTP anormaux en volume: 404 sur des chemins inexistants, 403 après blocage, 500 suite à des tentatives d’injection user agent identique ou “générique” sur des centaines de requêtes, parfois avec des variations minimes tentatives de requêtes vers des endpoints rarement utilisés sur votre site (et qui n’ont pas de raison d’être exposés) adresses IP qui reviennent en boucle, parfois sur des plages entières si vous êtes sur un réseau “proxy”
Ce travail de lecture est moins sexy que la suppression d’un fichier, mais c’est ce qui évite de répéter la même opération. Nettoyer une infection une fois, puis subir la même pression, c’est comme repeindre une porte trouée et laisser la pluie couler au même endroit.
Vérifier d’abord l’impact réel avant de “courir partout”
Avant toute action, j’ai appris à rester un peu pragmatique: identifier ce qui est réellement compromis, puis agir dans l’ordre.
Le piège classique: on supprime un plugin “suspect”, mais on oublie qu’un utilisateur admin a été créé. Ou on purge un fichier injecté, mais la compromission vient d’un autre point, un thème modifié ou un script placé ailleurs. Dans le même temps, on peut vouloir bloquer des IP trop vite et casser un service légitime (par exemple des outils de monitoring, des partenaires, ou même des robots SEO honnêtes mais bruyants).
L’objectif est d’assembler un puzzle. Vous pouvez le faire en suivant une logique simple:
1) confirmer si l’intégrité des fichiers est atteinte (thèmes, plugins, fichiers racine) 2) vérifier la base (utilisateurs, options, modifications récentes) 3) observer les logs pour isoler les patterns récurrents 4) ensuite seulement verrouiller et réduire la surface exposée
Ce n’est pas “lent”, c’est méthodique. Dans une intervention où j’avais un doute, la vérification m’a permis d’économiser plusieurs heures: aucun fichier critique n’était modifié, mais les tentatives d’exploitation et la bruteforce montaient si haut que le serveur donnait l’impression d’être “piraté” à l’écran.
Supprimer malware WordPress : ce que vous devez contrôler concrètement
Pour supprimer malware WordPress, la démarche la plus sûre passe par la restauration et la comparaison. Mais tout le monde ne peut pas recréer un site depuis zéro. L’idée est de réduire le risque.
Commencez par les points souvent touchés:
- fichiers modifiés dans le thème ou des plugins présence de backdoors sous des noms “banals” (fichiers PHP discrets, scripts dans des dossiers inattendus) modifications dans le fichier de configuration ou des fichiers racine comptes utilisateurs ajoutés sans action de votre part chargement de contenus externes via des scripts ou des iframes injectés dans des zones de template
Ensuite, regardez la base avec des questions concrètes: y a-t-il des nouveaux utilisateurs, des rôles inattendus, des modifications de paramètres, des publications étranges, ou des tentatives de spam via des formulaires.
Un bon réflexe opérationnel: si vous avez un historique de déploiement (date de mise à jour, plugin installé, thème modifié), vous pouvez recouper. Si les requêtes malveillantes ont commencé le même jour qu’une mise à jour, il se peut que la compromission soit une exploitation d’une faiblesse connue, plutôt qu’un “malware qui se balade”.
Une première liste de signaux qui orientent vers la compromission
Quand vous voyez plusieurs signaux, la priorité bascule vers la purge:
- nouveaux comptes administrateurs ou éditeurs que vous ne reconnaissez pas fichiers PHP dans des emplacements inhabituels, avec des dates de modification récentes présence de code obfusqué dans les thèmes ou plugins, même si “ça semble fonctionner” redirections vers des domaines externes, surtout depuis des pages clés spam de contenu, pages créées automatiquement, ou liens injectés dans le HTML
À ce stade, l’objectif n’est pas juste d’“effacer”, c’est de reconstruire une base saine, puis de supprimer les déclencheurs.
Bloquer les requêtes malveillantes récurrentes: réduire la pression sans casser le site
Une fois que la partie “suppression” est traitée ou au moins vérifiée, il faut empêcher les attaques de continuer à tourner. C’est souvent plus efficace que de garder des défenses en surface.
Le blocage peut se faire à plusieurs niveaux, et le meilleur choix dépend de votre infrastructure: CDN, pare-feu applicatif, règles au niveau du serveur web, règles au niveau WordPress, et éventuellement filtrage sur le poste d’entrée (WAF).

Ce qui marche bien, et ce qui peut poser problème
Un blocage trop agressif peut créer des effets secondaires:
- bloquer des IP d’un hébergeur partenaire qui vous envoie des requêtes légitimes pénaliser des outils de sauvegarde ou d’uptime qui passent par des plages d’adresses partagées déclencher des faux positifs quand un bot “malveillant” partage un user agent avec des robots non dangereux
À l’inverse, un blocage trop doux laisse la majorité des requêtes passer, ce qui conserve la charge serveur et retarde l’amélioration ressentie.
En pratique, j’aime combiner des approches: d’abord réduire l’exposition (limiter les endpoints sensibles), ensuite bloquer ce qui est clairement malveillant (patterns d’URL), puis durcir l’accès aux zones qui subissent la plupart des attaques (connexion, xmlrpc, API exposée selon votre usage).
Cartographier les endpoints visés avant d’écrire des règles
Avant d’appliquer des règles, prenez 20 minutes pour répondre à une question simple: quelles URL sont touchées le plus souvent?
Souvent, vous verrez:
- des tentatives sur des chemins de type “recherche de scripts” ou “uploads” des appels répétés à xmlrpc.php si vous n’en avez pas l’usage des requêtes vers des pages d’administration, parfois avec des variations d’arguments des attaques sur des paramètres d’URL qui déclenchent des erreurs 4xx et 5xx
Même si vous n’êtes pas certain à 100% du but de chaque requête, le fait qu’elles soient récurrentes et anormales suffit pour prioriser un blocage.
Une règle prudente consiste à bloquer ce qui est manifestement non utilisé sur votre site. Par exemple, si vous n’utilisez pas le service lié à xmlrpc.php, le désactiver réduit une surface fréquente. Si votre site n’a pas de raisons d’accepter des appels externes à certaines routes, vous pouvez les limiter.
Diminuer la charge avant de “fixer” le site
Le trait d’union entre suppression et blocage, c’est la charge. Même si votre WordPress est propre, des attaques peuvent le rendre injouable. Donc, agir sur la charge est aussi une manière de “résoudre” le malware au sens large, parce que vous récupérez la stabilité du site.
Par exemple, si vous voyez des rafales et une montée de 404 sur des chemins inexistants, bloquer ces patterns au niveau du pare-feu diminue le volume traité par PHP et par WordPress.
Si vous voyez surtout des tentatives de login, la réponse doit être différente: rate limiting, durcissement du formulaire, et si nécessaire blocage temporaire d’IP trop active. Dans l’idéal, vous corrigez aussi la cause côté WordPress, comme un mot de passe faible ou une mauvaise configuration.
Une mini procédure pragmatique pour agir sans regret
Voici un ordre que j’utilise en intervention, adapté aux cas où les attaques sont récurrentes et où vous voulez avancer sans hypothèse hasardeuse.
1) Faites une sauvegarde vérifiée (fichiers et base), même si vous pensez “déjà être sain” 2) Analysez les fichiers et la base pour chercher les traces d’une compromission réelle 3) Identifiez 2 ou 3 endpoints récurrents dans les logs, ceux qui génèrent le plus de bruit 4) Appliquez des règles de blocage ciblées sur les patterns d’URL ou sur la sensibilité des endpoints 5) Surveillez 24 à 48 heures, puis ajustez les règles selon les faux positifs
Cette séquence évite un piège fréquent: appliquer des blocages avant d’avoir vérifié l’intégrité, puis perdre du temps à réparer après avoir bloqué une commande de secours ou une route nécessaire à votre propre maintenance.
Durcir WordPress pour que l’attaque ait moins d’occasions de réussir
Bloquer les requêtes récurrentes aide beaucoup, mais durcir WordPress rend l’attaque plus coûteuse. C’est là que vous gagnez le long terme.
Même sans citer de produit précis, plusieurs leviers reviennent dans les déploiements bien tenus:
- mises à jour WordPress, thèmes et plugins, sans laisser traîner des versions obsolètes suppression des plugins inutilisés, surtout ceux peu maintenus limitation de l’accès aux zones sensibles (gestion, connexion) configuration prudente des fonctions exposées si vous n’en avez pas l’utilité, comme certaines interfaces d’API renforcement contre le bruteforce et la fraude de connexion (authentification plus robuste, blocage progressif) contrôle des fichiers modifiés et de l’exécution de PHP dans des zones non attendues
Je sais que “mettre à jour” peut sembler banal, mais dans les faits, beaucoup d’infections et d’abus viennent d’un décalage dans le temps, et d’un plugin qui n’a pas été suivi.
Ne confondez pas “suppression” et “résilience”
Un point qui revient dans les retours d’expérience: une infection nettoyée ne garantit pas que les attaques cessent. Les scripts malveillants ne lisent pas votre patch. Ils continuent parce qu’ils cherchent une cible valide, et WordPress ressemble à un catalogue de portes.
C’est pour cela que le blocage des requêtes récurrentes est une partie du même projet que la suppression malware. Vous faites deux choses différentes:
- supprimer ce qui a été planté ou modifié chez vous empêcher que les mêmes essais aient encore un effet sur vos performances, vos logs, et vos chances d’exploitation
Quand vous traitez ces deux dimensions, la différence est nette: moins d’alertes, moins de charge, moins de bruit, un site plus prévisible.
Exemple concret d’ajustement après blocage
Dans un cas récent, les logs montraient une hausse continue sur des requêtes visant des scripts et des endpoints d’essai. Après une première série de blocages ciblés, le volume global a baissé, mais il restait un pic à heure fixe.
En analysant plus finement, on a découvert que ce pic venait d’une plage d’adresses IP liée à un service intermédiaire, pas à une ici seule machine. En bloquant “à l’aveugle” au niveau IP, on aurait coupé un accès légitime utilisé par une intégration marketing.
La correction a consisté à modifier la logique de blocage: au lieu de bloquer toute la plage, on a bloqué les patterns d’URL précis, ceux qui ne correspondent pas à une navigation normale. Le site a retrouvé sa stabilité, et le partenaire a continué de fonctionner. C’est exactement le type de compromis que les règles doivent permettre.
Mesurer si vos règles “fonctionnent” vraiment
Après suppression et blocage, il faut des indicateurs simples. Vous n’avez pas besoin de tableaux complexes pour juger.
Surveillez:
- la baisse du nombre de requêtes totales sur la fenêtre où l’attaque était la plus forte la diminution des codes d’erreur liés aux tentatives (par exemple 404 sur des chemins non pertinents) la stabilité des pages sous charge, notamment sur les pages à plus fort trafic la réduction des alertes de sécurité l’absence de nouveaux changements dans les fichiers et la base
Si vous voyez une baisse des erreurs mais pas des volumes, vos règles filtrent peut-être partiellement. Si vous voyez des faux positifs, vous devez ajuster, pas abandonner. Les règles doivent évoluer avec ce que disent vraiment les logs.
Edge cases: quand un “blocage” peut masquer un problème
Parfois, bloquer une URL “suspecte” fait disparaître les symptômes visibles, mais vous ne résolvez pas la cause. Un exemple typique: vous bloquez xmlrpc.php, mais les tentatives d’injection continuent via d’autres routes.
Ou vous bloquez les user agents les plus visibles, mais l’attaquant alterne la signature. Les bots adaptent leurs comportements, surtout quand ils sont automatisés.
Il y a aussi le cas où le problème n’est pas une infection mais un plugin vulnérable ou mal configuré. Dans ce scénario, vous pouvez bloquer des requêtes, réduire l’attaque, et pourtant une future tentative pourrait passer. La vraie solution consiste à corriger la faiblesse. Le blocage n’est pas un remplacement de la correction.
Continuer après 48 heures: audit léger et routine
Une fois le pic d’attaques retombé, l’erreur fréquente est d’arrêter la surveillance. Je préfère une routine courte plutôt qu’un gros audit tous les mois.
Pendant quelques jours, vérifiez que:
- aucun nouveau fichier suspect n’apparaît aucun utilisateur ne réapparaît avec des rôles inattendus le site reste rapide et stable les patterns récurrents diminuent progressivement
Si vous avez un journal d’événements (sur l’interface de sécurité de votre hébergeur, ou via les logs serveur), prenez l’habitude de corréler un changement de règles à un effet mesurable. Les attaques réagissent, donc votre défense doit aussi s’adapter.
Choisir la bonne stratégie de blocage selon votre setup
La meilleure méthode dépend de l’endroit où vous pouvez appliquer des règles:
- au niveau du pare-feu ou du CDN, idéal pour réduire tôt le volume au niveau serveur (Nginx/Apache), utile pour des patterns d’URL et des restrictions au niveau applicatif, utile quand les tentatives touchent des comportements WordPress spécifiques au niveau WordPress, utile pour les aspects d’authentification et d’accès
Si vous êtes sur un environnement où vous ne maîtrisez pas assez finement les règles serveur, je conseille souvent de commencer par les actions les plus simples et les plus réversibles, comme la désactivation d’une fonctionnalité non utilisée (quand c’est pertinent), et le durcissement de l’auth. Ensuite, vous construisez des règles plus précises à partir de vos logs.
Ce que vous voulez éviter, c’est une usine à gaz de règles basées sur des hypothèses. Les requêtes récurrentes sont un cadeau, elles vous donnent des indices concrets. Utilisez-les pour écrire des règles qui ciblent les patterns, pas votre curiosité.
Ce que j’aimerais savoir avant de commencer (et que tout le monde apprend après)
Je l’ai vu plusieurs fois: la meilleure défense n’est pas seulement technique, elle est aussi organisationnelle. Une équipe qui sait où regarder les logs, qui a une procédure de restauration, et qui documente les changements réduit le stress pendant une crise.
Quand une attaque tourne en boucle, la tentation est de “faire vite”. Oui, il faut agir vite, mais pas aveuglément. En pratique, la vitesse vient de la préparation: sauvegardes à jour, mise à jour des composants, accès à un environnement de test, et capacité à valider l’intégrité des fichiers.
C’est aussi pour ça que supprimer malware WordPress doit être pensé comme une étape, pas comme un rituel isolé. Si vos requêtes malveillantes restent actives, elles vont continuer à vous pousser dans le même cycle: alerte, correction, puis retour des symptômes.
En combinant purge de la compromission éventuelle et blocage ciblé des requêtes récurrentes, vous transformez un problème répétitif en épisode maîtrisé. Et sur un site WordPress, c’est souvent la différence entre “on répare quand ça casse” et “on empêche que ça recommence”.