Guide · 3 min de lecture

Comment sécuriser la connexion WordPress

En bref : donnez à chaque administrateur un mot de passe long et unique et l’authentification à deux facteurs, limitez le nombre de tentatives de connexion par adresse, et supprimez les comptes administrateur inutilisés. Le cœur de WordPress ne limite pas lui-même les tentatives de connexion : ajoutez une limite sur le serveur web, le CDN ou avec une extension. Renommer l’URL de connexion ne suffit pas à protéger.

Mis à jour le · HackGrade

Analysez d’abord votre site. L’analyse gratuite indique lesquels de ces correctifs vous concernent. Analyse de sécurité WordPress

Étapes rapides

  1. Faites le ménage dans les comptes administrateur. Supprimez les administrateurs inutilisés et donnez aux autres le rôle le plus bas qui convient.
  2. Activez la connexion en deux étapes. Utilisez une application TOTP avec des codes de secours pour chaque administrateur et éditeur.
  3. Limitez wp-login.php. Limitez les tentatives par adresse IP sur le serveur, le CDN ou avec une extension.
  4. Restreignez ou fermez les autres portes. Bloquez XML-RPC s’il est inutilisé et passez en revue les mots de passe d’application.
  5. Déconnectez les sessions volées. Au moindre doute, changez les clés secrètes pour mettre fin à toutes les sessions.

Le code et la configuration restent en anglais.

Pourquoi la page de connexion est la porte d’entrée

Des robots essaient des mots de passe courants et divulgués sur /wp-login.php et /xmlrpc.php toute la journée, sur presque tous les sites WordPress. La plupart réussissent non par ingéniosité, mais parce qu’un mot de passe a été réutilisé sur un autre site victime d’une fuite. Un seul mot de passe administrateur volé suffit pour installer une extension malveillante : la connexion mérite donc plusieurs couches de protection.

1. Faites le ménage dans les comptes administrateur

Listez toutes les personnes disposant du contrôle total et supprimez ou rétrogradez celles qui n’en ont pas besoin. Les rédacteurs ont rarement besoin de plus que le rôle Éditeur ou Auteur.

Terminal
wp user list --role=administrator --fields=ID,user_login,user_email,user_registered

Chaque personne a son propre compte (pas d’identifiant « admin » partagé) et un mot de passe long et unique issu d’un gestionnaire de mots de passe. Si votre site a encore un utilisateur nommé littéralement admin, créez un nouvel administrateur, transférez-lui le contenu et supprimez l’ancien.

2. Activez l’authentification à deux facteurs

La connexion en deux étapes arrête la plupart des attaques par mot de passe volé, car l’attaquant a aussi besoin d’un code provenant du téléphone de l’utilisateur. L’extension gratuite Two Factor du répertoire d’extensions de WordPress.org prend en charge les applications d’authentification (TOTP), les codes par e-mail et les codes de secours. Installez-la, puis chaque utilisateur l’active dans Comptes → Profil. Préférez une application d’authentification aux codes par e-mail, remettez aux utilisateurs leurs codes de secours et imposez-la à chaque administrateur et éditeur. Beaucoup de suites de sécurité offrent la même fonction si vous en utilisez déjà une.

3. Limitez les tentatives de connexion

Le cœur de WordPress ne limite pas les échecs de connexion : les robots peuvent essayer indéfiniment. Le meilleur endroit pour les arrêter est avant l’exécution de PHP. Sur nginx, une limite de débit sur la page de connexion laisse passer les vrais utilisateurs et ralentit les robots :

nginx
# in the http { } block
limit_req_zone $binary_remote_addr zone=wplogin:10m rate=10r/m;

# in the server { } block, above your general PHP location
location = /wp-login.php {
    limit_req zone=wplogin burst=5 nodelay;
    limit_req_status 429;
    # then the same fastcgi lines as in your location ~ \.php$ block, e.g.:
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass unix:/run/php/php-fpm.sock;
}

Testez-la sur votre propre site ; après quelques requêtes rapides, vous devriez voir 429 :

Terminal
for i in $(seq 1 20); do curl -s -o /dev/null -w '%{http_code} ' -X POST https://yourdomain.com/wp-login.php; done; echo

Derrière Cloudflare, une règle de rate limiting sur le chemin /wp-login.php fait la même chose en bordure du réseau. Sur un hébergement mutualisé sans accès au serveur, une extension reconnue de limitation des tentatives de connexion est le choix pratique.

4. N’autorisez la connexion que depuis des adresses connues (facultatif)

Si toutes les personnes qui se connectent travaillent depuis des adresses IP fixes, vous pouvez fermer la page de connexion à tous les autres. Sur Apache 2.4, dans .htaccess :

.htaccess
<Files "wp-login.php">
    Require ip 203.0.113.10 198.51.100.0/24
</Files>

Ne bloquez pas /wp-admin/admin-ajax.php : de nombreux thèmes et extensions l’utilisent pour les visiteurs. Sautez cette étape si votre équipe se connecte depuis des réseaux changeants ou si des clients se connectent à une boutique ; utilisez plutôt la 2FA et la limitation des tentatives.

5. Fermez les autres portes

XML-RPC est une ancienne API distante qui accepte aussi les mots de passe. Si vous n’utilisez ni l’application mobile WordPress ni Jetpack, bloquez-la comme indiqué dans la checklist de durcissement WordPress. Les mots de passe d’application permettent à des outils externes d’utiliser l’API REST ; passez-les en revue dans Comptes → Profil et révoquez ceux que vous ne reconnaissez pas. Si rien ne les utilise, désactivez la fonction avec une petite extension must-use :

PHP
<?php
// wp-content/mu-plugins/no-app-passwords.php
add_filter( 'wp_is_application_passwords_available', '__return_false' );

6. Si vous soupçonnez un mot de passe volé

Changez le mot de passe, puis remplacez les clés secrètes dans wp-config.php. Cela déconnecte toutes les sessions sur tous les appareils, y compris celle d’un attaquant :

Terminal
wp config shuffle-salts

Cherchez ensuite les administrateurs ou extensions que vous n’avez pas ajoutés, comme expliqué dans Comment savoir si votre site WordPress est piraté.

Et masquer l’URL de connexion ?

Déplacer wp-login.php vers une adresse secrète réduit le bruit des robots dans vos journaux, mais ce n’est pas une protection : l’adresse fuit via des liens et des extensions, et cela ne sert à rien contre un mot de passe divulgué. Utilisez-le en complément, après la 2FA et la limitation des tentatives.

Ce que vérifie HackGrade

L’analyse gratuite signale les noms d’utilisateur que WordPress expose publiquement, un point d’accès XML-RPC ouvert, ainsi qu’un cœur, des extensions et des thèmes WordPress obsolètes avec des vulnérabilités connues. Elle n’essaie jamais de deviner des mots de passe, pas même lors de l’analyse approfondie.

Questions fréquentes

WordPress limite-t-il les tentatives de connexion par défaut ?

Non. Le cœur de WordPress ne limite pas les échecs de connexion. Ajoutez une limite sur le serveur web, sur votre CDN ou avec une extension.

Quelle méthode de double authentification utiliser pour WordPress ?

Une application d’authentification (TOTP) avec des codes de secours conservés. Les codes par e-mail valent mieux que rien, mais quiconque accède à la boîte mail obtient aussi le code.

Faut-il changer l’URL de wp-admin ?

Cela réduit le bruit des robots, mais n’arrête ni un attaquant déterminé ni un mot de passe divulgué. Faites-le seulement en complément de la 2FA et de la limitation des tentatives.

La limitation des tentatives va-t-elle bloquer mes clients ?

Pas avec une limite raisonnable, par exemple 10 tentatives par minute avec une petite marge. Les vraies personnes se connectent rarement plus de quelques fois par minute.

Sources

Guides associés

Gratuit · Immédiat · Sans inscription

Découvrez votre note avant quelqu’un d’autre.

Analyse passive. Rien n’est attaqué sans votre autorisation.

Gratuit pour commencer. Pro dès 29 $ par mois (environ 24 $ en facturation annuelle), ou un rapport unique complet à 29 $. Voir les tarifs