Des milliers de requêtes POST sur xmlrpc.php, un site qui rame, du CPU à fond — ton WordPress est probablement attaqué par brute-force. Voici comment stopper ça et sécuriser le site.
Comment savoir si tu es attaqué ?
Les signes : site lent, consommation CPU élevée, et dans les logs d'accès Apache/Nginx :
185.xx.xx.xx - - "POST /xmlrpc.php HTTP/1.1" 200 4812
91.xx.xx.xx - - "POST /xmlrpc.php HTTP/1.1" 200 4812
203.xx.xx.xx - - "POST /xmlrpc.php HTTP/1.1" 200 4812
Plein d'IPs différentes, toutes en POST sur xmlrpc.php, avec un code 200 (le serveur répond sans broncher). Ce sont des bots qui testent des combinaisons login/mot de passe via la méthode wp.getUsersBlogs.
Comment bloquer xmlrpc.php ?
Sur Apache — ajoute dans ton .htaccess :
<Files xmlrpc.php>
Require all denied
</Files>
Sur Nginx :
location = /xmlrpc.php {
deny all;
return 403;
}
Comment bloquer aussi la REST API ?
Le problème : par défaut, WordPress expose la liste de tes utilisateurs publiquement :
curl https://tonsite.be/wp-json/wp/v2/users
# Retourne les noms d'utilisateurs → l'attaquant a la moitié du travail fait
La solution : ajoute dans functions.php :
add_filter('rest_authentication_errors', function($result) {
if (!is_user_logged_in()) {
return new WP_Error('rest_not_logged_in',
'API accessible uniquement aux utilisateurs connectés.',
array('status' => 401));
}
return $result;
});
Comment vérifier s'il y a eu compromission ?
Même si tu as bloqué l'attaque, vérifie que rien n'a été compromis avant :
- Vérifie les comptes admin WordPress — un compte inconnu = compromission
- Vérifie les plugins installés — un plugin que tu ne reconnais pas = possible backdoor
- Cherche des fichiers
.phpdanswp-content/uploads/(il ne devrait y avoir que des images) - Vérifie le
.htaccess— les attaquants y ajoutent souvent des redirections - Régénère les clés de sécurité dans
wp-config.php
Comment sécuriser WordPress durablement ?
- 2FA sur tous les comptes admin (plugin WP 2FA ou Wordfence)
- Limiter les tentatives de connexion : plugin Limit Login Attempts Reloaded (gratuit)
- WAF : Wordfence ou Sucuri pour filtrer les requêtes avant PHP
- Mises à jour automatiques pour le core, plugins et thèmes
- Ne pas utiliser "admin" comme nom d'utilisateur
L'alternative : passer au statique
Si ton site n'a pas besoin de fonctionnalités dynamiques (commentaires, e-commerce, espace membre), un site statique HTML est objectivement plus sûr. Zéro PHP, zéro base de données, zéro surface d'attaque. C'est d'ailleurs ce qu'utilise BelgGeek.