Un site piraté, ça arrive aux meilleurs. Pas de honte, pas de panique. Mais pas d'amateurisme non plus. Ce que vous faites dans la première heure détermine si vous récupérez votre trafic en 48 h ou si vous le perdez pour 6 mois.
Ce qu'il NE FAUT PAS faire
Erreur #1 : Se connecter à l'admin et installer un plugin "sécurité"
Vous écrasez les logs, vous alertez l'attaquant (qui a souvent un accès persistant), vous ne nettoyez rien. Les plugins nettoyeurs détectent 60 % des infections max (source : WPScan 2024).
Erreur #2 : Restaurer une vieille sauvegarde sans analyse
Vous remettez la faille en place. L'attaquant revient par la même porte dans l'heure.
Erreur #3 : Supprimer des fichiers "suspects" au feeling
Vous cassez le site, vous perdez les preuves pour l'analyse, vous laissez des backdoors.
Erreur #4 : Ne changer que le mot de passe admin
L'attaquant a souvent : accès FTP, base de données, clé API, utilisateur fantôme, tâche cron, backdoor dans mu-plugins.
Ce qu'il FAUT faire (dans l'ordre)
1. Isolez le site (maintenance réelle)
Via .htaccess (racine) — pas via l'admin :
RewriteEngine On
RewriteCond %{REMOTE_ADDR} !^VOTRE\.IP\.ICI$
RewriteRule ^(.*)$ /maintenance.html [R=302,L]
Créez maintenance.html simple : "Site en maintenance pour raison de sécurité. Retour sous peu." Pas de détails techniques.
2. Changez TOUS les accès
- WordPress : tous les admins + éditeurs (nouveaux mots de passe 20+ caractères, générateur)
- FTP/SFTP : nouveau mot de passe, nouvelles clés SSH si possible
- Base de données : nouveau user + mot de passe, maj
wp-config.php - Hébergement / cPanel / Plesk : mot de passe + 2FA si dispo
- Cloudflare / CDN : token API, règles WAF
3. Diagnostic : trouvez le vecteur
Outils (ordre d'exécution) :
wpscan --url https://votresite.com --enumerate u,vt,cb,dbe,tt --api-token VOTRE_TOKEN(gratuit pour usage perso)grep -r "eval\|base64_decode\|gzinflate\|str_rot13\|create_function" wp-content/ wp-includes/ wp-admin/find . -name "*.php" -mtime -7 -type f(fichiers modifiés 7 derniers jours)- Vérifiez
wp_users: utilisateurs admin inconnus, emails suspects wp_options:siteurl,home,users_can_register(doit être 0)- Tâches cron :
wp cron event list(via WP-CLI) ou tablewp_options→cron - Dossiers suspects :
wp-content/mu-plugins/,wp-content/uploads/(fichiers .php),wp-includes/(fichiers non core)
Vecteurs les plus vus (nos stats 2024) :
- Plugin nulled / abandonné : 38 %
- Mot de passe admin faible / réutilisé : 29 %
- Vulnérabilité plugin/core non patchée : 22 %
- Thème piraté / functions.php modifié : 11 %
4. Nettoyage chirurgical
Principe : on ne nettoie pas, on remplace.
- Sauvegarde BD complète (mysqldump) — avant toute action
- Fichiers core WordPress : supprimez
wp-admin/,wp-includes/, fichiers racine (saufwp-config.php,.htaccess,robots.txt). Réinstallez depuis wordpress.org (même version exacte). - Plugins/thèmes : supprimez tout
wp-content/plugins/,wp-content/themes/. Réinstallez depuis sources officielles (versions propres). Thème enfant : recréez-le propre. - mu-plugins : videz le dossier, recréez seulement vos fichiers légitimes.
- Uploads : scan complet (
clamscan -r wp-content/uploads/). Supprimez tout.php,.phtml,.htaccessdans uploads. Vérifiez les images :file wp-content/uploads/**/* | grep -v image. - Base de données :
wp_users: gardez seulement les vrais utilisateurs, changez tous les mots de passe (hash bcrypt)wp_options: vérifiezsiteurl,home,admin_email,users_can_register=0,default_role=subscriberwp_posts/wp_postmeta: recherchez<script>,iframe,eval(,base64danspost_content- Nettoyez les options transients corrompues :
DELETE FROM wp_options WHERE option_name LIKE '_transient_%' AND option_value LIKE '%eval%';
5. Remise en ligne + validation
- Mettez à jour
wp-config.php: nouvelles clés de salage (générateur WP), DB user/pass,DISALLOW_FILE_EDIT,FORCE_SSL_ADMIN. - Videz TOUS les caches : serveur (opcache, redis, varnish), CDN (Cloudflare : "Purge Everything"), plugin cache, navigateur.
- Testez : 20 URLs échantillon (home, catégories, articles, contact, admin, login, sitemap, robots.txt).
curl -I https://votresite.com/→ 200, pas de redirect, headers sécurité présents.- Search Console : "Demander une révision" (onglet Sécurité > Problèmes détectés > "J'ai corrigé les problèmes").
- Soumettez sitemap.xml mis à jour.
6. Durcissement (obligatoire)
Sans ça, récidive sous 30 jours garantie.
- Mises à jour auto mineures :
define('WP_AUTO_UPDATE_CORE', 'minor'); - Interdire édition fichiers :
define('DISALLOW_FILE_EDIT', true); - Forcer HTTPS admin :
define('FORCE_SSL_ADMIN', true); - Limiter connexions : plugin Limit Login Attempts Reloaded (config : 3 essais, lockout 20 min, IP whitelist admin)
- WAF : Cloudflare gratuit (règles OWASP + blocage pays à risque) OU ModSecurity serveur
- XML-RPC : désactiver si pas utilisé (
add_filter('xmlrpc_enabled', '__return_false');) - REST API : restreindre si pas utilisé (plugin Disable REST API ou code)
- Sauvegardes : quotidiennes, externalisées (pas même serveur), testées mensuellement
- Monitoring : uptime (UptimeRobot gratuit) + intégrité fichiers (Wordfence scan quotidien + alerte email)
Cas spécifiques
Alerta Google "Site piraté" / "Contenu trompeur" :
La révision Search Console prend 24-72 h. Si refusé : relisez le rapport, il y a souvent une page oubliée (souvent dans /wp-content/uploads/202X/ ou page orpheline).
Redirection vers spam/pharma/casino :
Cherchez dans : index.php racine, .htaccess, wp-config.php, wp-settings.php, functions.php thème, mu-plugins. Souvent du code obfusqué en haut du fichier.
Back-office inaccessible :
Via FTP : renommez plugins/ → plugins_off/ → accès admin rétabli. Puis réactivez un par un.
Via BD : INSERT INTO wp_users (user_login, user_pass, user_nicename, user_email, user_status, user_registered, display_name) VALUES ('admin2', '$P$B...', 'admin2', 'votre@email.com', 0, NOW(), 'Admin'); (hash bcrypt généré via WP-CLI wp hash password).
Hébergeur a suspendu :
Demandez la liste exacte des fichiers détectés. Nettoyez en local, renvoyez propre, demandez réactivation.
Combien de temps ? Combien ça coûte ?
| Niveau | Temps pro | Coût pro (HT) | Temps DIY (si expé) |
|---|---|---|---|
| Simple (code injecté, 1 fichier) | 2-4 h | 250 € | 4-6 h |
| Moyen (multiples fichiers, 1 backdoor) | 4-8 h | 450 € | 8-12 h |
| Complexe (BD corrompue, multiples backdoors, cron) | 8-16 h | 650-950 € | 16-24 h (risqué) |
Notre intervention : diagnostic sous 2 h (gratuit si nettoyage), remise en ligne jour même, durcissement inclus, monitoring 3 mois. Demander l'urgence.
Checklist post-incident (à faire dans la semaine)
- Audit complet plugins/thèmes : supprimer les inutilisés, remplacer les abandonnés
- Mettre à jour TOUT (core, plugins, thèmes, PHP version serveur)
- Configurer Cloudflare (gratuit) : SSL Full Strict, WAF, rate limiting, cache
- Mettre en place sauvegardes externalisées quotidiennes + test restauration
- Documenter l'incident : date, vecteur, actions, coûts, leçons
- Former l'équipe : phishing, mots de passe, mise à jour
Votre site est piraté maintenant ? On intervient aujourd'hui. Diagnostic sous 2 h, nettoyage, remise en ligne, durcissement. Urgence WordPress — 06 02 55 17 36.
