80% des sites WordPress piratés ne le découvrent que des semaines après l’intrusion. Pire : la plupart des propriétaires ne remarquent rien jusqu’à ce que Google blackliste leur site ou que leur hébergeur suspende le compte. Voici les 8 signes qui ne trompent pas — et comment réagir en moins de 10 minutes.

Les chiffres font froid dans le dos : selon le rapport Sucuri 2026, une infection WordPress dure en moyenne 42 jours avant d’être détectée. Pendant ce temps, le pirate a tout loisir d’installer des backdoors, de voler des données clients, d’envoyer du spam SEO, ou de transformer votre serveur en nœud d’attaque DDoS. Le pire ? La plupart des signes sont visibles si on sait où regarder. Voici comment mener un audit rapide.

Ce guide est conçu pour être utilisé sans plugin supplémentaire — juste WP-CLI et les commandes serveur standard. Si vous n’avez pas WP-CLI, adaptez avec phpMyAdmin et un client FTP. Comptez 10 minutes pour un premier diagnostic complet.

1. Utilisateurs inconnus dans l’admin

Le premier signe, le plus évident : des comptes que vous n’avez pas créés. Les pirates créent souvent des comptes avec des noms discrets comme « support », « admin2 » ou « editor ».

# Lister TOUS les utilisateurs avec leur date de création
wp user list --fields=ID,user_login,user_email,user_registered,roles

# Rechercher les utilisateurs créés récemment
wp user list --orderby=registered --order=desc | head -10

# Vérifier les administrateurs spécifiquement
wp user list --role=administrator

Alarme rouge si : un compte admin que vous ne reconnaissez pas, ou un compte avec un email suspect (@yandex.com, @proton.me, etc.).

2. Fichiers PHP inconnus dans wp-content

Les pirates cachent souvent des backdoors (webshells) dans les dossiers uploads, plugins ou thèmes. Ces fichiers leur permettent de reprendre le contrôle même si vous changez les mots de passe.

# Chercher des fichiers PHP ajoutés dans les 7 derniers jours
find wp-content/ -name "*.php" -mtime -7 -ls

# Chercher des noms de fichiers suspects
find . -name "*.php" | grep -E "(shell|backdoor|cmd|upload|adminer|weevely|b374k|c99|r57)"

# Vérifier les fichiers modifiés récemment dans wp-content/
find wp-content/ -type f -mtime -3 -ls | sort -k6

Alarme rouge si : des fichiers PHP avec des noms aléatoires (x12hk3.php), ou dans wp-content/uploads/ (qui ne devrait contenir que des médias).

3. Trafic sortant anormal

Un site piraté envoie souvent du spam, participe à des attaques DDoS, ou exfiltre des données. Le trafic sortant explose.

# Vérifier les connexions réseau actives sur le serveur
netstat -tunap | grep -E "ESTABLISHED|SYN_SENT" | grep -v ":80\|:443"

# Chercher des fonctions d'exfiltration dans le code
grep -r "curl_exec\|file_get_contents\|fsockopen\|exec\|shell_exec\|eval\|base64_decode" wp-content/ --include="*.php" | grep -v "wp-includes"

4. Injections de liens cachés (spam SEO)

Les pirates insèrent des liens vers des sites de casino, pharma ou contrefaçon dans votre contenu. Ces liens sont souvent cachés via CSS (display:none, position:absolute à -9999px).

# Chercher des liens cachés dans le contenu
wp post list --fields=ID,post_title,post_content | grep -iE "(casino|viagra|cialis|handbag|replica|cheap|loan|payday)"

# Chercher du code JavaScript injecté dans les posts
wp db query "SELECT ID, post_content FROM wp_posts WHERE post_content LIKE '%eval%' OR post_content LIKE '%base64_decode%' OR post_content LIKE '%<script%'"

# Scanner le footer pour des liens hidden
curl -s https://votresite.com | grep -iE "display.*none|visibility.*hidden|position.*absolute.*-9999"

5. Redirections vers des sites malveillants

Un visiteur tape votre URL et se retrouve sur un site de phishing. Les pirates utilisent souvent des redirections conditionnelles (mobile uniquement, ou 1 visiteur sur 10).

# Chercher des redirections forcées dans les fichiers
grep -r "wp_redirect\|header.*Location\|window.location\|\.htaccess.*Redirect" wp-content/ --include="*.php"

# Vérifier le .htaccess pour des règles suspectes
cat .htaccess | grep -iE "Redirect|RewriteRule.*http"

6. Scripts de minage de crypto-monnaie

Les mineurs cachés (cryptojacking) consomment le CPU de vos visiteurs. Ils sont souvent injectés dans le footer ou via un plugin piraté.

# Chercher des scripts de minage
grep -r "CoinHive\|coinhive\|crypto-loot\|webminer\|minero\|cryptonight\|wasm\|WebAssembly" wp-content/ --include="*.js"

# Vérifier les scripts chargés par le site
curl -s https://votresite.com | grep -iE "miner|coin-hive|cryptoloot|webassembly"

7. Google Search Console : actions manuelles

Si Google détecte un piratage, il applique une action manuelle et votre site disparaît des résultats de recherche. C’est souvent là que les propriétaires découvrent le piratage.

# Vérifier si le site est blacklisté par Google Safe Browsing
curl -s "https://transparencyreport.google.com/safe-browsing/search?url=votresite.com"

# Vérifier les avertissements de sécurité dans Search Console
# Allez dans : https://search.google.com/search-console/security-issues

8. Emails WordPress envoyés en masse

Votre site envoie 5000 emails par heure ? C’est un script de spam qui tourne sur votre serveur. Vérifiez la file d’attente d’emails et les logs.

# Vérifier la file d'attente d'emails (si vous utilisez un plugin SMTP)
wp option get mail_queue

# Chercher des fonctions d'envoi d'email suspectes
grep -r "wp_mail\|mail\|phpmailer" wp-content/ --include="*.php" | grep -v "wp-includes\|contact-form"

Plan d’action si vous détectez un piratage

  1. Mettez le site en mode maintenance immédiatement
  2. Changez TOUS les mots de passe : WordPress, FTP, base de données, cPanel
  3. Sauvegardez les logs avant qu’ils ne soient effacés
  4. Identifiez le point d’entrée : plugin vulnérable ? mot de passe faible ?
  5. Restaurez une sauvegarde propre antérieure à l’intrusion
  6. Mettez à jour tous les plugins et thèmes
  7. Changez les salts WordPress
  8. Auditez les comptes utilisateurs

La détection précoce est votre meilleure défense. Programmez ces vérifications chaque semaine — 10 minutes suffisent.

Automatiser la détection

Vous pouvez programmer ces vérifications avec un script cron quotidien :

#!/bin/bash
# audit-quotidien.sh — Vérification rapide WordPress

SITE="/var/www/html"
ALERT_EMAIL="admin@votresite.com"

# 1. Fichiers PHP modifiés dans les 24h
CHANGED=$(find $SITE/wp-content -name "*.php" -mtime -1 | wc -l)
if [ "$CHANGED" -gt 5 ]; then
    echo "⚠️ $CHANGED fichiers PHP modifiés en 24h" | mail -s "ALERTE WordPress" $ALERT_EMAIL
fi

# 2. Nouveaux utilisateurs admin
NEW_USERS=$(wp user list --role=administrator --orderby=registered --order=desc --format=csv | tail -n +2 | head -1)
# À parser et comparer avec une liste blanche

# 3. Taille anormale de la BDD
DB_SIZE=$(wp db size --tables --format=csv | tail -n +2 | awk -F, '{sum+=$2}END{print sum}')
if [ "$DB_SIZE" -gt 50000000 ]; then
    echo "⚠️ BDD > 50 MB: $DB_SIZE" | mail -s "ALERTE WordPress" $ALERT_EMAIL
fi

echo "$(date): Audit OK — $CHANGED fichiers modifiés, DB: $DB_SIZE" >> /var/log/wp-audit.log

Avec ces 8 points de contrôle et un script automatisé, vous passez d’une détection en 42 jours à une détection en moins de 24 heures. La différence entre un incident mineur et une catastrophe.


Sources et références

W
WP Admin Lab

Architecte web full-stack. WordPress, performance, data et sécurité. Notes de terrain, tests reproductibles et retours d'expérience.