Sur WordPress, beaucoup d’attaques passent par un même chemin: modifier, ajouter ou remplacer des fichiers sans que vous le sachiez. Parfois c’est un script malveillant planqué dans un dossier inattendu, parfois c’est un plugin livré avec une porte dérobée, parfois c’est un thème qui “se met à jour tout seul”. Dans tous les cas, l’idée est la même: si quelqu’un change des fichiers critiques, vous voulez être averti avant que l’injection ne serve.
C’est là que les alertes de modification de fichiers deviennent un levier très concret. Un scanner malware WordPress est utile pour la détection, mais les alertes orientées “intégrité des fichiers” jouent un rôle complémentaire: elles vous donnent un signal quand quelque chose bouge, même avant que le scanner n’ait le temps de conclure. Et surtout, elles vous aident à relier un changement à un moment précis. Cela simplifie l’analyse, la restauration, et la preuve en cas de remise en cause.

Ci-dessous, je détaille une approche réaliste pour définir des alertes efficaces sur WordPress, en tenant compte des faux positifs, des limites techniques, et des décisions que vous devez prendre selon votre contexte.
Pourquoi les alertes de fichiers sont souvent plus utiles que “juste scanner”
Le scanner est très bien pour dire “voici ce qui semble compromis”. Mais il arrive que:
- le malware soit déjà présent depuis plusieurs jours, et que le scanner le détecte tard; la charge utile soit discrète, et passe entre les mailles lors d’un scan ponctuel; certains événements n’apparaissent pas comme “malwares” au moment du scan, parce que ce sont des modifications en amont: remplacement de fichiers de base, ajout d’un outil de persistance, ou modification de configuration.
Les alertes de modification changent la dynamique. Au lieu d’attendre un résultat, vous cherchez le déclencheur. Quand un fichier dans wp-content change à 02:13, vous avez un repère. Si juste avant, vous n’avez pas lancé une mise à jour ou un déploiement, votre suspicion devient immédiatement plus solide.
Sur le terrain, la différence la plus visible se fait sur la vitesse de décision. Un incident “froid” à partir d’un scan, c’est stressant: on ne sait pas ce qui a été modifié, ni quand. Un incident “chaud” déclenché par une alerte, c’est plus froid, justement. Vous pouvez comparer avec ce que vous aviez planifié, vérifier les journaux, et restaurer de façon ciblée.
Définir ce que vous voulez surveiller (et ce que vous acceptez de ne pas surveiller)
Avant de configurer quoi que ce soit, il faut choisir une approche d’intégrité. Les fichiers WordPress ne sont pas tous égaux:
- certains sont attendus et changent rarement (core WordPress, fichiers de configuration, scripts d’authentification); d’autres changent souvent et légitimement (uploads, caches, index générés, miniatures); d’autres dépendent de votre usage (plugins auto-update, thème builder, intégration e-commerce, logs applicatifs).
Le piège classique, c’est vouloir surveiller “tout le monde”. Vous aurez des alertes partout, et vous finirez par les ignorer. L’objectif est de surveiller assez pour voir les comportements anormaux, pas de noyer votre exploitation.
Un bon compromis consiste à:
- surveiller l’intégrité des fichiers de code, particulièrement dans wp-content (plugins et thèmes) et à la racine; surveiller les fichiers de configuration et les points d’entrée (par exemple les fichiers PHP susceptibles d’être modifiés); ignorer ou réduire la granularité pour les dossiers qui changent fréquemment et dont les changements ne sont pas directement corrélés à un incident (uploads, caches, certains répertoires de génération).
Le “bon” niveau dépend aussi de votre capacité de triage. Si vous ne pouvez pas traiter 50 alertes par jour, vous devez être plus sélectif.
Choisir une source d’alertes: plugin WordPress vs surveillance serveur
Vous avez en pratique deux familles de solutions, qui peuvent aussi se compléter.
1) Alertes via un plugin de sécurité
Des outils courants proposent une détection et des alertes sur les fichiers modifiés, souvent via des contrôles d’intégrité, une surveillance au niveau WordPress, ou des signatures. L’avantage, c’est la mise en place rapide et l’accès à des métadonnées propres à l’environnement WordPress (liste de fichiers, états, comportements liés aux plugins).
L’inconvénient, c’est que la couverture dépend du périmètre que le plugin surveille, et du fait que l’attaquant peut agir “dans” WordPress ou “autour” de WordPress. Si l’intrusion altère la partie WordPress qui gère les scans, vous voulez aussi un signal qui ne dépend pas du même logiciel.
2) Surveillance serveur (inotify, audit, Wazuh/OSSEC, etc.)
À l’échelle serveur, vous pouvez définir une surveillance d’intégrité ou des événements de modification. L’avantage, c’est l’indépendance: même si WordPress est compromis, l’agent serveur continue à observer le système de fichiers. Vous pouvez aussi obtenir des timestamps plus précis, et parfois des informations plus riches que “fichier X modifié”.
L’inconvénient, c’est que cela demande un minimum de mise en place (agent, règles, droits), et que vous devez éviter les pièges de performance. Sur de gros hébergements, surveiller trop de chemins peut coûter cher.
Dans les environnements qui subissent des incidents régulièrement, je conseille souvent un duo: alerte applicative pour le contexte WordPress, et alerte serveur pour la robustesse. Si vous ne pouvez pas faire les deux, choisissez en priorité la source qui continue de fonctionner même en cas de compromission partielle de WordPress.
Le cœur du paramétrage: quelles alertes et avec quel seuil
Définir des alertes, ce n’est pas seulement “activer la surveillance”. Il faut préciser:
- quels répertoires et fichiers déclenchent une alerte; le type de modification (création, modification, suppression, permission); le seuil (immédiat, quotidien, par lot); la sensibilité (liste blanche de fichiers attendus, exclusion de dossiers bruyants); la destination (email, webhook, Slack, ticketing, etc.).
La logique “immédiate” vs “regroupée”
Si vous envoyez chaque modification par email immédiatement, vous allez avoir un bruit difficile à absorber. Sur WordPress, des scripts et des mises à jour peuvent déclencher plusieurs modifications successives.
Sur un site qui évolue peu, une alerte immédiate https://gardewp.fr/ sur les fichiers PHP critiques peut être raisonnable. Sur un site qui déploie souvent des thèmes, ou qui a des plugins qui génèrent des fichiers, une logique “regroupement par heure” peut être plus digeste. L’essentiel est d’avoir une fenêtre exploitable pour relier l’événement à un changement humain ou à un cron.
L’important: la liste blanche et le contexte
Le contexte évite 80 pour cent du bruit. Si vous déployez régulièrement, vous devez connaître ce qui change à chaque déploiement. Sans cela, vos alertes seront perçues comme des faux positifs.
Dans un cas réel que j’ai vu, un client recevait des alertes répétées sur un fichier de cache généré par un plugin. Le scanner le marquait comme “modifié”, mais l’attaque n’était pas là. En ajoutant une exclusion sur ce chemin et en gardant la surveillance sur les plugins et thèmes, le signal est redevenu utile.
Quand et comment envoyer les alertes: réduire le bruit sans perdre la valeur
La destination de vos alertes influe sur votre capacité à agir vite. Email seul, c’est souvent trop lent, surtout si votre équipe ne consulte pas régulièrement sa boîte. Un canal type webhook vers un outil de supervision ou une messagerie opérationnelle peut être plus efficace.
Le point clé est aussi de définir qui reçoit quoi. Par exemple:
- les alertes de modifications sur fichiers de configuration et fichiers PHP “à risque” vont à une équipe restreinte; les alertes plus générales sur un plugin non critique peuvent aller dans un canal de surveillance, avec une fréquence de résumé; les alertes de suppression ou de permission inhabituelle doivent être traitées en priorité.
Vous pouvez aussi décider d’élever le niveau de gravité si l’alerte s’accompagne d’un autre signal, par exemple un pic de requêtes sur un chemin suspect, ou une hausse d’erreurs PHP. Je recommande de ne pas sur-automatiser la réponse, mais de vous donner assez d’information pour commencer le triage tout de suite.
Un plan d’implémentation pragmatique (sans basculer dans la surcharge)
Voici un déroulé qui marche bien dans beaucoup de situations, parce qu’il commence par cadrer le périmètre et termine par l’exécution.
- Identifiez vos “actifs”: wp-config.php, fichiers PHP à la racine, dossiers de plugins et de thèmes, et tout ce qui est géré par votre processus de déploiement. Activez la surveillance d’intégrité sur ces actifs, en excluant uploads, caches, et répertoires générés si vous avez un signal alternatif pour ces derniers. Configurez des alertes immédiatement sur les créations et modifications de fichiers PHP, et regroupez le reste pour limiter le volume. Ajoutez une liste blanche réaliste pour les changements prévus (par exemple fichiers générés par votre système de build, ou logs applicatifs). Testez avec un changement volontaire, puis vérifiez la qualité de l’alerte: est-ce le bon fichier, le bon moment, et avec assez de contexte pour agir.
Ce plan vous évite l’erreur la plus fréquente: “j’ai activé une surveillance, donc j’ai une sécurité”. Sans triage et sans périmètre, vous obtenez de la fatigue, et la fatigue fait rater l’alerte qui compte.
Exemple concret: alertes sur wp-content, sans déclencher une alarme à chaque mise à jour
Supposons que vous voulez détecter rapidement un malware WordPress qui dépose un fichier dans un plugin ou un thème. Le point sensible, c’est wp-content.
En pratique, vous surveillez plutôt:
- les dossiers de plugins installés (pas uniquement les fichiers principaux, mais aussi les sous-dossiers de ces plugins); les dossiers de thèmes actifs et, selon votre risque, les thèmes non actifs si vous les gardez longtemps; certains fichiers spécifiques liés à la persistance (fichiers PHP “helper”, fichiers de configuration de plugin, scripts chargés par des hooks).
Vous évitez de déclencher à chaque modification sur:
- uploads (les utilisateurs peuvent modifier leurs contenus, et les médias ajoutés sont attendus); caches et minifications générées; répertoires qui changent en continu, si vous n’avez pas une raison sécurité de le faire.
Le résultat, c’est que vos alertes ressemblent à quelque chose d’opérationnel: “plugin X a modifié tel fichier PHP”.
Scanner malware WordPress et alertes: comment les faire travailler ensemble
On peut combiner deux logiques:
- le scanner malware WordPress fait une analyse plus “intelligente” et orientée contenu (signatures, heuristiques, indicateurs connus); l’alerte de modification fait un suivi de l’intégrité et du calendrier.
Quand une alerte de modification arrive, vous pouvez déclencher un scan ciblé. Ce ciblage est important pour le temps et la précision. Scanning complet à chaque modification, c’est souvent excessif et parfois bruyant.
L’idéal est de créer une relation simple entre les deux:
- alerte sur modification d’un chemin sensible; scan “sur ce périmètre” ou audit rapide des fichiers modifiés; décision: restauration, mise en quarantaine, analyse d’accès, vérification des comptes.
Même si votre outil de scan conclut “pas de malware trouvé”, l’alerte vous indique quand vérifier. Le fait d’avoir un journal d’intégrité change votre posture: vous n’êtes plus en mode réaction aléatoire.
Les faux positifs, et comment rester honnête sans ignorer les signaux
Les faux positifs ne sont pas un bug, ce sont souvent le reflet d’un périmètre mal cadré. WordPress change. Les plugins écrivent. Certains thèmes régénèrent. Les environnements de staging finissent par diverger.
Les cas typiques:
- mise à jour automatique d’un plugin, suivie d’une avalanche de fichiers modifiés; déploiement via CI, qui touche plusieurs fichiers dans un même intervalle; régénération de cache, minification, optimisation d’assets; changements de permissions après une intervention FTP ou un “chown/chmod” mal repliqué.
Mon approche consiste à séparer “changement attendu” et “changement inattendu”. Quand un changement attendu est reconnu, vous pouvez soit:
- désactiver temporairement la notification pendant une fenêtre très courte, soit conserver l’alerte mais baisser la sévérité, ou l’envoyer dans un canal différent.
Le piège, c’est d’ouvrir une fenêtre de maintenance trop large. Une fenêtre “de toute la journée” masque parfois le moment exact où l’attaque se déclenche. Préférez des fenêtres courtes, corrélées à vos actions humaines.
Mettre en place des règles d’analyse: que faire quand une alerte tombe
Quand vous recevez une alerte, la première question n’est pas “est-ce que c’est un malware”. C’est plutôt “qu’est-ce qui a changé, et est-ce attendu”.
Une petite méthode de triage, simple mais efficace, peut tenir en quelques étapes. Par exemple:
- Vérifiez votre calendrier: mise à jour prévue, déploiement, action manuelle récente, cron qui régénère du contenu. Contrôlez le chemin exact: le fichier modifié est-il dans un dossier de code (plugins, thèmes, racine), ou dans un dossier de contenu/caches? Regardez les permissions et le propriétaire: un changement de droits peut indiquer une compromission ou une mauvaise opération de l’administrateur. Lancez un scan ciblé sur le fichier ou le plugin concerné, plutôt qu’un scan complet à l’aveugle. Si tout est “anormal”, isolez: mettez en quarantaine le code concerné, restaurez depuis une base saine, puis investiguez l’accès (comptes, mots de passe, tokens).
Cette séquence évite la panique. Elle force aussi des preuves: vous ne vous contentez pas d’un ressenti.
Ce qu’il faut surveiller au-delà des fichiers: le couple “intégrité” et “accès”
Une alerte de modification suffit parfois, mais beaucoup d’incidents se clarifient mieux si vous reliez les fichiers à l’accès. Un malware peut modifier des fichiers via:
- un compte administrateur compromis; une session volée; une vulnérabilité activée à distance; un plugin qui a déjà une faille.
Si vous ne regardez que l’intégrité, vous verrez “ça a bougé”. Si vous regardez aussi les accès, vous voyez “qui l’a déclenché”. Sur un WordPress, les journaux d’accès serveur et les journaux d’activité WordPress (quand ils sont disponibles et fiables) sont précieux.
Cela ne signifie pas qu’il faut tout centraliser. Mais il faut au minimum:
- savoir quels administrateurs ont modifié des plugins et thèmes récemment; vérifier les tentatives de connexion inhabituelles; regarder si des fichiers PHP ont été modifiés à l’heure d’une session suspecte.
Edge cases qui pièchent même les équipes sérieuses
Quelques situations récurrentes:
1) Le site fait du build automatique Si vous déployez un thème avec un pipeline, des fichiers changent sur une durée relativement courte. Les alertes peuvent se ressembler à une intrusion. Dans ce cas, le bon remède est d’aligner votre surveillance avec votre processus, par exemple en identifiant les fichiers générés et en les traitant comme des changements attendus.
2) Le serveur est “bruyant” au niveau système Sur certains environnements, des opérations de maintenance changent des métadonnées. Si votre solution d’alerting considère toute modification de méta comme un événement, vous aurez des alertes sans valeur sécurité. D’où l’importance de surveiller des événements réellement pertinents.
3) L’attaquant modifie un mécanisme de scan Si vous ne faites confiance qu’à un scanner interne à WordPress, un attaquant très déterminé peut tenter de biaiser les résultats. La surveillance côté serveur est alors un filet de sécurité, même si elle n’est pas parfaite.
Petite validation: testez votre système d’alerte comme un produit, pas comme une option
Vous pouvez avoir la meilleure configuration du monde, si personne ne sait l’utiliser. Je recommande un exercice simple, en environnement de test ou sur un créneau très maîtrisé:
- choisissez un fichier “surveillé” non critique; déclenchez une modification volontaire contrôlée; observez ce que reçoit l’équipe, quand elle le reçoit, et ce qu’elle peut déduire.
Vous voulez arriver à une conclusion du type: “l’alerte dit le bon fichier, le bon moment, et donne assez d’éléments pour décider quoi faire”. Si ce n’est pas le cas, ajustez les exclusions, le niveau de sensibilité, ou le format de notification.
Paramétrage final: un compromis durable
Quand les alertes sont bien réglées, elles deviennent une discipline. Vous n’êtes pas en train de “surveiller tout”, vous surveillez ce qui change quand il ne devrait pas changer. Vous transformez le scanner malware WordPress en moteur de diagnostic, et les alertes en déclencheur d’enquête.
Le succès tient à trois décisions:
- périmètre réaliste, avec des exclusions assumées; seuil et canal capables d’être traités sans fatigue; procédure de triage courte, répétable, et documentée.
Si vous voulez une mesure concrète de votre qualité, regardez votre historique: après quelques semaines, vous devriez voir des alertes qui mènent à des actions ou à des vérifications claires, et non à des “on a ignoré”. C’est ce signal-là qui prouve que votre système d’alertes sert réellement la sécurité, plutôt que de vous occuper.
Si vous me décrivez votre configuration (hébergement, présence ou non d’un agent serveur, et si vous déployez via CI), je peux vous proposer un périmètre de surveillance plus précis, avec une stratégie d’exclusion adaptée à votre rythme de changements.