Quand un site WordPress se fait “pirater”, on pense souvent à des formulaires dérobés ou à une page de défiguration. Dans la vraie vie, le scénario le plus fréquent et le plus vicieux est plus discret : des injections de scripts ajoutées dans le header. Elles peuvent être invisibles pour l’internaute, ou se traduire par des redirections, des appels vers des domaines douteux, un chargement de scripts qui mine de la ressource, ou simplement une pollution SEO.
J’ai déjà vu des sites où l’attaque ne touchait presque rien d’autre. Un seul fichier modifié dans le thème, une ligne ajoutée dans le header.php, et pendant des jours le site semblait “normal”. Puis Google Search Console a commencé à remonter des signaux d’URL ajoutées ou de redirections. La difficulté, c’est que l’injection dans le header est à la fois simple à mettre en place pour l’attaquant et difficile à éradiquer proprement si on ne suit pas une méthode.
Ce guide explique comment repérer ces injections, comment les supprimer sans casser le site, et surtout comment empêcher qu’elles reviennent.
Comprendre le problème : pourquoi l’injection du header est si efficace
Le header HTML est chargé avant le contenu principal. C’est exactement pour ça que beaucoup d’attaquants s’en servent. Même si vous ne cherchez pas longtemps, la page “view-source” ou l’inspecteur navigateur montre rapidement que quelque chose a été ajouté.
Typiquement, l’injection se présente sous une forme de ce genre :
- un ou un bloc obfusqué injecté juste avant la fermeture du ; un script qui crée dynamiquement un élément script et le charge depuis un domaine tiers ; une condition selon document.referrer, la langue, l’agent utilisateur, ou une variable de cookies ; un code qui déclenche des redirections selon l’URL visitée.
Ce point est important : même si vous supprimez le morceau visible, un code peut être construit pour reconstituer la charge utile, ou pour ne s’activer qu’après un certain temps.
Enfin, il y a une particularité WordPress : le header “final” peut être assemblé par plusieurs couches. Le thème rend le header.php, mais des plugins peuvent aussi utiliser des hooks pour injecter du contenu. Il faut donc penser en “chaîne”, pas en “un seul fichier”.
Ce qu’on observe quand un site est infecté
Avant de toucher au site, je préfère relever les indices. Pas pour faire joli, pour gagner du temps et éviter une suppression à l’aveugle.
Les signaux fréquents sont :
- un code obfusqué ou des appels vers des domaines inconnus qui apparaissent dans le head ; des redirections qui ne se produisent que pour certains navigateurs, ou seulement sur certaines pages (par exemple uniquement les pages produit ou catégories) ; une hausse de l’activité réseau au chargement initial, avec des requêtes vers des URLs étranges ; des changements “fantômes” : vous revenez au bon fichier, et le site semble réinfecté après un moment ; des champs “curieux” dans la base de données (options, métadonnées) ou des tâches planifiées modifiées.
La partie piège, c’est que l’injection peut être minuscule. Une seule ligne dans un fichier du thème, ou un ajout dans un hook. À l’inverse, parfois le fichier semble propre, mais le code est ajouté via un plugin compromis ou via un compte administrateur qui a modifié le thème depuis l’interface.
Signes visuels à vérifier rapidement
Voici une mini vérification, sans encore corriger quoi que ce soit. Elle évite de partir dans la mauvaise direction :
Ouvrez le site, puis affichez le code source de la page (ou inspectez l’élément head). Cherchez des balises