Votre site WordPress est piraté, et vous voulez qu'il cesse de l'être. Supprimer les fichiers suspects et lancer une extension de sécurité est la façon la plus sûre de revoir le même piratage quelques jours plus tard. Un pirate qui a pris pied sur un serveur laisse presque toujours de quoi revenir : un compte administrateur, un fichier caché, une tâche planifiée qui réinstalle sa charge. Et tant que sa porte d'entrée reste ouverte, il n'en a même pas besoin.
Nettoyer un site piraté, c'est donc quatre choses, dans cet ordre : trouver la faille, nettoyer le piratage, retirer les portes dérobées, corriger la faille. Puis faire sortir le spam de Google. Ce guide détaille chaque étape avec les commandes utiles. Les passages techniques sont signalés : sans accès SSH, confiez-les à votre hébergeur ou à votre prestataire.
Avant de toucher au site : figer, isoler, changer les accès
Faire une copie de l'état piraté
Premier réflexe, contre-intuitif : sauvegarder le site tel qu'il est, fichiers et base de données, infection comprise. Elle permet de revenir en arrière, de retrouver la porte d'entrée et de prouver ce qui s'est passé à un assureur ou à la CNIL. Rangez-la hors du serveur, clairement nommée.
Si vous avez des sauvegardes plus anciennes, ne les restaurez pas les yeux fermés. Google le rappelle dans son guide pour les sites piratés : vérifiez d'abord que la sauvegarde a été créée avant le piratage.
Isoler le site
Si le site redirige vos visiteurs ou leur sert du code malveillant, mettez-le hors ligne. Google recommande une réponse 503, servie depuis l'extérieur du serveur compromis : une page de maintenance générée par le WordPress piraté peut elle-même être manipulée. Votre hébergeur peut le faire ; prévenez-le dans tous les cas, les autres sites de votre compte sont peut-être touchés.
Changer tous les mots de passe, depuis un poste sain
Tous, pas seulement celui de WordPress : espace client de l'hébergeur, FTP et SFTP, base de données (à reporter dans wp-config.php), chaque compte administrateur, et la boîte mail qui reçoit les réinitialisations. Faites-le depuis un ordinateur sain : un poste d'administrateur infecté figure en tête des causes de piratage listées par Google.
Si le site traite des données personnelles
Formulaires de contact, comptes clients, commandes WooCommerce : un piratage peut être une violation de données au sens du RGPD. Si elle présente un risque pour les personnes, elle se notifie à la CNIL dans les 72 heures si possible après sa découverte, quitte à compléter ensuite ; au-delà, le retard doit être justifié. Si le risque est élevé, les personnes concernées doivent aussi être informées. Toute violation, notifiée ou non, doit être documentée en interne (articles 33 et 34 du RGPD).
Mesurer l'étendue du piratage, côté Google
Dressez d'abord la liste de ce que le pirate a publié sous votre nom : elle servira à la désindexation et indique la nature de la charge : pages de casino en turc (la famille la plus fréquente dans notre veille, détaillé dans notre article sur les pages de casino et de paris sportifs), pharmacie, contrefaçons en japonais (voir le piratage par mots-clés japonais).
- La recherche
site:votredomaine.frdans Google, page après page de résultats. - Dans Search Console, le rapport Problèmes de sécurité, le rapport Pages et les requêtes du rapport Performances dans des langues que vous ne parlez pas.
- Dans Paramètres › Utilisateurs et autorisations, un propriétaire que vous ne connaissez pas : certains pirates vérifient votre site dans leur propre Search Console pour y déclarer leurs sitemaps. Retirez-le, puis supprimez le fichier ou la balise de validation qu'il a posé.
- Dans Sitemaps, un fichier que vous n'avez pas déclaré.
Ces pages sont souvent invisibles dans votre navigateur : le serveur ne les sert qu'au robot de Google, c'est le cloaking. Pour voir ce que Google reçoit, suivez notre guide pour vérifier si un site est piraté.
- Dans Google, tapez
site:votredomaine.fret parcourez les pages listées. Des titres qui ne vous ressemblent pas sont servis depuis votre site. - Dans Search Console, ouvrez Sécurité et actions manuelles puis Problèmes de sécurité.
- Collez une URL suspecte dans le Test des résultats enrichis et cliquez sur Afficher la page testée, onglet HTML : vous lisez ce que votre site envoie à Google.
Le détail de ces trois vérifications est sur notre page méthode.
Étape 1 : trouver la porte d'entrée
C'est elle qui décide si le piratage reviendra : un site nettoyé dont la faille reste ouverte sera réinfecté par le même chemin. Google ajoute une mise en garde utile : plusieurs piratages indépendants peuvent coexister, et en trouver un ne dispense pas de chercher les autres.
| Piste | Où regarder | Ce qui doit alerter |
|---|---|---|
| Extension ou thème vulnérable | Liste des extensions et thèmes, avec leurs versions | Une version en retard de plusieurs mois, une extension abandonnée par son auteur, une faille publiée pour la version installée |
| Extension ou thème « nulled » | Extensions premium installées sans licence | Une version payante téléchargée gratuitement sur un site tiers : elle est régulièrement livrée avec sa porte dérobée |
| Mot de passe volé ou trop faible | Journaux d'accès du serveur, dernières connexions | Des centaines de tentatives sur wp-login.php ou xmlrpc.php, puis une connexion réussie ; un mot de passe réutilisé ailleurs |
| Accès hébergement ou FTP compromis | Historique de connexion de l'espace client et du FTP | Des connexions depuis un pays ou une heure qui ne correspondent à personne |
| Voisin infecté | Autres sites du même compte d'hébergement | Un vieux site oublié dans un sous-dossier ou un sous-domaine, jamais mis à jour |
Si vous avez accès aux journaux du serveur (votre hébergeur les fournit souvent dans l'espace client), cherchez les requêtes POST vers des fichiers qui ne devraient pas en recevoir : un fichier PHP dans uploads, un nom aléatoire à la racine. La date de la première requête vers ce fichier date l'intrusion, et la requête qui la précède montre souvent par où elle est passée. Les dates de modification des fichiers aident aussi, avec une réserve : un pirate peut les falsifier, elles ne prouvent donc rien à elles seules.
Étape 2 : remplacer tout ce qui peut l'être
Le principe : ne pas fouiller les fichiers de WordPress, des extensions et des thèmes, mais les remplacer par des copies officielles.
Si vous avez un accès SSH et WP-CLI, ajoutez --skip-plugins --skip-themes à chaque commande : sans ces options, WP-CLI charge les extensions et le thème, donc le code du pirate. Le fichier wp-config.php est lu quoi qu'il arrive, d'où l'intérêt de l'ouvrir tôt.
# 1. Le cœur de WordPress : comparer aux sommes officielles
wp core verify-checksums --include-root --skip-plugins --skip-themes
# 2. Le réinstaller par-dessus, dans la même version, sans toucher à wp-content
wp core download --version=$(wp core version --skip-plugins --skip-themes) --locale=fr_FR --skip-content --force
# 3. Les extensions : comparer aux sommes de WordPress.org
wp plugin verify-checksums --all --skip-plugins --skip-themes
La première commande signale les fichiers modifiés ou en trop, et avec --include-root les fichiers étrangers à la racine. Le réinstallateur écrase les fichiers officiels mais ne supprime pas les fichiers en trop : relancez la vérification après, et supprimez ce qu'elle signale encore.
La vérification des extensions a une limite : elle ne connaît que les extensions publiées sur WordPress.org. Vos extensions premium, votre thème acheté, votre thème enfant ne sont pas vérifiés. Réinstallez les premières depuis le compte de l'éditeur, et relisez le thème enfant à la main, en commençant par functions.php. Supprimez enfin toute extension désactivée ou inconnue : inactive, elle reste exploitable.
Sans SSH, le même travail se fait par FTP : remplacer wp-admin, wp-includes et chaque extension par des copies fraîches.
Étape 3 : fouiller ce qui ne se remplace pas
wp-config.php et les fichiers .htaccess
wp-config.php doit contenir vos réglages et rien d'autre : pas d'include vers un fichier inconnu, pas de longue chaîne illisible. Les fichiers .htaccess se cherchent dans tous les dossiers, pas seulement à la racine : une règle de réécriture suffit à rediriger les visiteurs venus de Google ou à envoyer le robot vers le script du pirate.
Le dossier uploads
wp-content/uploads contient vos images et documents. Il n'a aucune raison de contenir du PHP, et c'est pourtant la cachette la plus courante.
# Fichiers exécutables dans uploads (il ne devrait y en avoir aucun)
find wp-content/uploads -type f \( -name "*.php" -o -name "*.phtml" -o -name "*.phar" \)
# Tous les .htaccess du site
find . -name ".htaccess"
# Fichiers PHP modifiés ces 30 derniers jours
find . -type f -name "*.php" -mtime -30
# Fonctions typiques du code masqué
grep -rlE "eval\(|base64_decode|gzinflate|str_rot13" --include="*.php" .
La dernière commande remonte aussi des extensions légitimes : un résultat n'est pas une preuve, c'est un fichier à ouvrir.
La base de données
Le pirate n'écrit pas que des fichiers. Dans la table wp_options (le préfixe peut différer chez vous), vérifiez siteurl et home, qui doivent pointer vers votre domaine, et active_plugins, qui doit correspondre à vos extensions. Dans wp_posts, cherchez les contenus qui contiennent du script ou des iframes que vous n'avez pas mis, et les pages publiées à des dates où personne n'a travaillé sur le site. Pensez aussi aux catégories et aux étiquettes.
wp option get siteurl --skip-plugins --skip-themes
wp option get active_plugins --skip-plugins --skip-themes
wp term list category --fields=term_id,name,slug,count --skip-plugins --skip-themes
wp db query "SELECT ID, post_title, post_date FROM wp_posts WHERE post_content LIKE '%<script%' OR post_content LIKE '%<iframe%';" --skip-plugins --skip-themes
Une jardinerie. Dans Google, une de ses pages apparaît sous ce titre :
« Bahis » signifie « paris » en turc, et « Archives » est le suffixe que WordPress ajoute aux pages de catégorie et d'étiquette. Le pirate a créé une catégorie sur le site : elle vit dans la base de données, pas dans les fichiers. Un nettoyage qui se limite aux fichiers la laisse en place. Sur les 79 sites piratés qui servaient à Google un titre de casino ou de paris dans notre veille (sites découverts entre mi-août et fin septembre 2026), 9 présentaient ce type de page « Archives ».
Étape 4 : retirer les portes dérobées
Une porte dérobée, ou backdoor, est ce que le pirate laisse pour revenir sans repasser par la faille. C'est elle qui explique les réinfections « inexplicables ». Les emplacements à passer en revue :
- Les comptes administrateur. Listez-les, et supprimez ceux que vous ne connaissez pas en réattribuant leurs contenus. Un compte peut être masqué dans le tableau de bord par une extension malveillante : la liste de WP-CLI, lancée sans extensions, ou une requête directe sur la table
wp_usermetane se laissent pas tromper. - Les mots de passe d'application. Ils permettent de piloter le site à distance sans passer par l'écran de connexion, et survivent à un changement de mot de passe. Vérifiez-les pour chaque administrateur, dans son profil ou avec WP-CLI.
- Les tâches planifiées. Celles de WordPress, et celles du serveur, dans le panneau de l'hébergeur ou avec
crontab -l. Une tâche au nom inconnu qui s'exécute chaque heure peut réinstaller toute la charge après votre nettoyage. - Les extensions « must-use » et les drop-ins. Les fichiers du dossier
wp-content/mu-pluginss'exécutent sans apparaître dans la liste des extensions. Les drop-ins (advanced-cache.php,object-cache.php,db.phpà la racine dewp-content) sont légitimes s'ils viennent de votre extension de cache, suspects sinon. - Les faux fichiers. Une extension au nom presque identique à une vraie, un fichier
index.phpdans un dossier qui n'en a pas besoin, un script au nom aléatoire à la racine. - Les sessions ouvertes. Régénérer les clés de sécurité de
wp-config.phpdéconnecte tout le monde, pirate compris.
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered --skip-plugins --skip-themes
wp db query "SELECT user_id, meta_value FROM wp_usermeta WHERE meta_key = 'wp_capabilities' AND meta_value LIKE '%administrator%';" --skip-plugins --skip-themes
wp user application-password list 1 --skip-plugins --skip-themes
wp cron event list --fields=hook,next_run_relative,recurrence --skip-plugins --skip-themes
wp plugin list --status=must-use --skip-plugins --skip-themes
wp plugin list --status=dropin --skip-plugins --skip-themes
wp config shuffle-salts
Remplacez le 1 par l'identifiant de chaque administrateur. Un compte supprimé qui réapparaît signale une porte dérobée oubliée : reprenez la liste.
Corriger la faille, puis rouvrir le site
La faille identifiée à l'étape 1 se corrige maintenant : mettre à jour ou supprimer l'extension vulnérable, remplacer l'extension « nulled » par une version sous licence ou par une alternative, fermer le vieux site oublié du compte. Ajoutez les réglages qui ferment des portes à peu de frais :
- WordPress, extensions et thèmes à jour, et les mises à jour de sécurité appliquées sans attendre ;
- la double authentification pour chaque administrateur, et le moins d'administrateurs possible ;
- l'édition de fichiers désactivée dans le tableau de bord, avec
define( 'DISALLOW_FILE_EDIT', true );danswp-config.php, comme le recommande la documentation officielle de WordPress ; - des droits de fichiers raisonnables (755 pour les dossiers, 644 pour les fichiers) ;
- l'exécution de PHP interdite dans
uploads, si votre serveur est un Apache, par un fichier.htaccessplacé dans ce dossier.
<FilesMatch "\.(php|phtml|phar)$">
Require all denied
</FilesMatch>
Rouvrez ensuite le site et repassez le Test des résultats enrichis sur la page d'accueil et sur quelques adresses de spam.
Faire sortir le spam de Google et demander le réexamen
Le serveur est propre, mais Google garde en mémoire les pages qu'il a indexées. Elles en sortent si elles répondent désormais par une erreur : chaque adresse de spam doit renvoyer un code 404 ou 410, jamais une redirection vers votre page d'accueil. Si elles sont nombreuses et visibles, l'outil Suppressions de Search Console les masque plus vite, par adresse ou par préfixe quand elles partagent un même dossier. Ce masquage dure environ six mois : il ne remplace pas la 404, il l'accompagne.
Déclarez ensuite un sitemap propre, retirez celui du pirate, et, si Search Console affiche un problème de sécurité ou une action manuelle, déposez la demande de réexamen. Google demande qu'elle explique le problème, décrive les mesures prises et en montre les résultats. Vos notes de nettoyage y répondent : faille trouvée, fichiers retirés, comptes supprimés. Notre article sur les problèmes de sécurité dans Search Console détaille la demande.
Côté délais, Google annonce, pour un site piraté avec du spam, un examen qui peut prendre jusqu'à plusieurs semaines, et quelques jours pour un logiciel malveillant ; une fois la demande acceptée, les avertissements disparaissent sous 72 heures. Une seule demande à la fois, et seulement une fois le problème réglé : une demande prématurée prolonge le signalement.
Ce que les extensions de sécurité voient, et ce qu'elles ratent
Wordfence, Sucuri et leurs équivalents reconnaissent des fichiers modifiés et des charges connues. Mais un scanner installé dans WordPress tourne à l'intérieur du site infecté, et ne connaît que ce qui ressemble à ce qu'il a déjà vu. Un scanner en ligne, lui, interroge votre site comme un visiteur : si le serveur ne sert le spam qu'aux adresses de Google, il ne voit rien. Le seul contrôle qui tranche pour le spam est celui que Google fait lui-même, décrit dans notre article sur le cloaking.
Surveiller les semaines suivantes
Pendant les semaines qui suivent, revenez régulièrement sur les mêmes points : la liste des administrateurs, les tâches planifiées, le dossier mu-plugins, les fichiers PHP de uploads, la recherche site: et Search Console. Tout nouvel élément signale une porte dérobée oubliée ou une faille mal identifiée.
Dans notre veille quotidienne des sites français piratés, les pages et les titres servis à Google changent en quelques jours : de l'ordre de six jours dans nos observations. Une recherche site: propre un jour ne prouve donc rien le lendemain : c'est la répétition des contrôles qui compte, pas un contrôle unique.
Cette surveillance, et les mises à jour qui évitent d'en arriver là, sont le cœur de notre maintenance à 200 € HT par mois : mises à jour suivies, sauvegardes, et les contrôles ci-dessus faits pour vous.
Le faire vous-même ou le confier
Tout ce qui précède est faisable seul, avec du temps, un accès SSH et de la méthode. Il ne pardonne pas l'oubli : une tâche planifiée ou un mot de passe d'application suffisent pour que le piratage revienne. Si vous préférez le confier, nous faisons ce parcours de la porte d'entrée au réexamen, avec le détail écrit de ce qui a été retiré. BetterCallBil est référencé sur la plateforme Cybermalveillance.gouv.fr ; notre méthode décrit ce que nous vérifions avant toute intervention, et le guide site piraté rassemble nos autres articles.
Diagnostic gratuit, nettoyage 450 € HT, rien ne démarre sans votre accord écrit.
Questions fréquentes
Pourquoi mon site WordPress est-il de nouveau piraté après le nettoyage ?
Parce que la faille par laquelle le pirate est entré est restée ouverte, ou parce qu'une porte dérobée a survécu : un compte administrateur, un mot de passe d'application, une tâche planifiée, un fichier dans mu-plugins ou un fichier PHP dans uploads. Il faut identifier la porte d'entrée, la corriger, et passer en revue chacun de ces emplacements.
Une extension de sécurité suffit-elle à nettoyer un site piraté ?
Non. Elle aide à repérer des fichiers modifiés et des charges connues, mais elle tourne à l'intérieur du site infecté et ne trouve pas la faille d'entrée. Un scanner en ligne interroge le site comme un visiteur : si le serveur ne sert le spam qu'à Google, il ne voit rien.
Faut-il restaurer une sauvegarde plutôt que nettoyer ?
Seulement si la sauvegarde date d'avant le piratage, ce qui est difficile à établir : une infection s'installe souvent bien avant de se voir. Même restauré, le site garde la faille d'origine, qu'il faut corriger avant de le remettre en ligne.
Combien de temps faut-il à Google pour retirer les pages de spam ?
Les pages qui renvoient une erreur 404 ou 410 sortent de l'index au fil des explorations ; l'outil Suppressions de Search Console les masque environ six mois en attendant. Pour un problème de sécurité, Google annonce un examen de quelques jours pour un logiciel malveillant et jusqu'à plusieurs semaines pour du spam.
Combien coûte le nettoyage d'un site WordPress piraté ?
Chez BetterCallBil, le diagnostic est gratuit et le nettoyage coûte 450 € HT : recherche de la faille, nettoyage, retrait des portes dérobées, désindexation du spam et demande de réexamen. La maintenance qui suit est à 200 € HT par mois.
Fondateur de BetterCallBil, prestataire référencé sur la plateforme Cybermalveillance.gouv.fr. Plus de dix ans de sites web, 200 sites gérés, et depuis 2026 une veille quotidienne des sites français qui servent du spam à Google. Notre méthode · Mentions légales
