Hushfort

Comment empêcher l’énumération des utilisateurs et masquer les identifiants sur WordPress ?

Par Eureka Studio · Mis à jour le

En bref

WordPress affiche les identifiants à quatre endroits publics : le point d’accès REST /wp-json/wp/v2/users, les redirections ?author=1, les URL des archives d’auteur et le plan du site natif des utilisateurs. Pour les masquer, bloquez la liste REST pour les visiteurs déconnectés, stoppez les scans ?author=, supprimez le plan du site des utilisateurs et uniformisez les messages d’erreur de connexion. Une extension peut faire les quatre ; testez ensuite chacun d’eux.

Étapes

  1. 1Étape 1

    Voyez ce que WordPress affiche aujourd’hui

    Rendez-vous sur yoursite.com/wp-json/wp/v2/users en étant déconnecté. Sur une installation par défaut, vous obtenez une liste JSON avec l’identifiant de connexion de chaque auteur dans le champ slug.

    La liste publique des utilisateurs REST à l’adresse yoursite.com/wp-json/wp/v2/users affichant le slug demo-admin
  2. 2Étape 2

    Essayez le scan des auteurs

    Rendez-vous maintenant sur yoursite.com/?author=1. WordPress redirige vers /author/votre-identifiant/, ce qui affiche le nom dans la barre d’adresse. Les robots comptent 1, 2, 3 pour collecter tous les utilisateurs.

    yoursite.com/?author=1 redirigé vers yoursite.com/author/demo-admin/, une page d’auteur intitulée Author: demo-admin
  3. 3Étape 3

    Fermez les quatre endroits

    Ouvrez Hushfort → Durcissement de surface et activez-le. Laissez activés Liste des utilisateurs REST, Scan des auteurs (« Bloquer les scans ?author=1 »), Liste des auteurs du plan du site et Infos d’auteur oEmbed, puis enregistrez.

    Réglages du Durcissement de surface : liste des utilisateurs REST bloquée pour les visiteurs déconnectés, scans des auteurs bloqués, liste des auteurs du plan du site et infos d’auteur oEmbed supprimées
  4. 4Étape 4

    Testez à nouveau depuis une fenêtre privée

    Refaites les mêmes requêtes en étant déconnecté. La liste des utilisateurs répond désormais « rest_no_route » avec une erreur 404, et ?author=1 ne redirige plus vers un identifiant.

    La même adresse de la liste des utilisateurs REST répondant désormais rest_no_route avec le statut 404

Pourquoi c’est important

Pour se connecter, un attaquant a besoin de deux choses : un identifiant et un mot de passe. WordPress, tel qu’il est livré, fournit la première moitié. Ce n’est pas un bug ; chaque endroit a sa raison d’être (flux pour les applications, URL d’auteur lisibles, moteurs de recherche). Mais ensemble, ils permettent à n’importe quel robot de dresser en quelques secondes la liste de tous les identifiants de connexion de votre site.

Masquer les identifiants ne rend pas un mot de passe faible sûr. Cela supprime en revanche la moitié facile du puzzle : chaque tentative doit alors deviner à la fois un nom et un mot de passe. Associé aux limites de connexion et à la double authentification, cela fait passer la devinette de lente à sans espoir.

Les quatre endroits où WordPress publie les identifiants :

  1. API REST — /wp-json/wp/v2/users liste les auteurs avec leur slug, qui correspond généralement à leur identifiant de connexion.
  2. Scans des auteurs — /?author=1 redirige vers /author/login-name/.
  3. Archives d’auteur — l’URL de l’archive contient elle-même le slug de l’auteur.
  4. Plan du site natif — /wp-sitemap-users-1.xml liste les URL des archives d’auteur. Les réponses oEmbed peuvent aussi inclure des informations sur l’auteur.

Erreurs courantes

  • Corriger un seul endroit et s’arrêter là. Fermer ?author= en laissant la liste REST ouverte ne change rien pour un robot. Vérifiez les quatre.
  • Un nom affiché identique à l’identifiant de connexion. Même avec toutes les fuites fermées, un thème qui affiche « Publié par admin » trahit le nom. Définissez un nom affiché différent dans Comptes → Profil.
  • Casser les vraies pages d’auteur. Sur un blog à plusieurs auteurs, les archives d’auteur sont utiles. Bloquez les scans par numéro plutôt que les archives elles-mêmes.
  • Des erreurs de connexion trop détaillées. « Le mot de passe que vous avez saisi pour l’identifiant jane est incorrect » confirme que le nom existe. Utilisez un seul message pour les deux cas.

Sans extension

Vous pouvez couvrir l’essentiel avec une extension indispensable (must-use) (wp-content/mu-plugins/hide-users.php) :

<?php
// 1. REST user list: logged-out visitors get nothing.
add_filter( 'rest_endpoints', function ( $endpoints ) {
    if ( ! is_user_logged_in() ) {
        unset( $endpoints['/wp/v2/users'], $endpoints['/wp/v2/users/(?P<id>[\d]+)'] );
    }
    return $endpoints;
} );

// 2. ?author=N scans: stop the redirect that reveals the name.
add_action( 'template_redirect', function () {
    if ( isset( $_GET['author'] ) && ! is_admin() ) {
        wp_safe_redirect( home_url( '/' ), 301 );
        exit;
    }
} );

// 3. Core sitemap: drop the users provider.
add_filter( 'wp_sitemaps_add_provider', function ( $provider, $name ) {
    return 'users' === $name ? false : $provider;
}, 10, 2 );

// 4. Same message for wrong username and wrong password.
add_filter( 'login_errors', function () {
    return 'The username or password is incorrect.';
} );

Mises en garde : testez d’abord sur un site de préproduction, car les thèmes et les extensions lisent parfois la liste des utilisateurs REST. Cela ne modifie pas le slug d’auteur dans les URL des archives ; pour cela, changez le nicename de chaque auteur ou utilisez une extension de gestion du nom affiché. Et c’est un fichier de plus à ne pas oublier lorsque vous déplacez ou reconstruisez le site.

En cas de problème

  • Une intégration a perdu sa liste d’auteurs. Certains outils externes lisent /wp/v2/users sans se connecter. Donnez-leur un mot de passe d’application pour qu’ils s’authentifient, ou autorisez de nouveau la liste.
  • Les pages d’auteur affichent une erreur 404. Vous avez choisi de désactiver complètement les archives d’auteur. Passez à l’option qui bloque uniquement les scans par numéro.
  • L’extension SEO liste toujours les auteurs. Beaucoup d’extensions SEO génèrent leur propre plan du site des auteurs. Désactivez aussi les plans du site des auteurs dans cette extension.

Avec Hushfort

Le Bouclier des identifiants fait partie de Hushfort Pro. L’Analyse de surface, qui montre ce qui fuit encore, est incluse dans Hushfort Security, l’extension de sécurité WordPress gratuite.

Le Bouclier des identifiants, qui fait partie de la couche Durcissement de surface de Hushfort, ferme les quatre endroits depuis un seul écran :

  • il bloque la liste REST /wp/v2/users pour les visiteurs non connectés,
  • il bloque les scans ?author=N tout en conservant les archives /author/name/ (ou désactive complètement les archives, si vous préférez),
  • il supprime le plan du site natif des utilisateurs et les informations d’auteur des réponses oEmbed,
  • il rend les messages d’erreur de connexion identiques pour un identifiant erroné et un mot de passe erroné.

Ensuite, l’Analyse de surface teste chaque endroit avec de vraies requêtes et nomme chaque identifiant qui fuite encore.

Questions fréquentes

Qu’est-ce que l’énumération des utilisateurs sur WordPress ?

C’est le fait de collecter les identifiants de connexion d’un site à partir d’URL publiques, comme ?author=1 ou la liste des utilisateurs REST. Une fois les noms connus, les attaquants n’ont plus qu’à deviner les mots de passe.

Est-ce un risque de sécurité si mon identifiant est visible ?

À lui seul, non, mais cela supprime la moitié du travail de devinette. Masquer les noms est une petite mesure de renforcement ; les mots de passe forts, les limites de connexion et la double authentification font le gros du travail.

Bloquer la liste des utilisateurs REST va-t-il casser l’éditeur ?

Non. Les utilisateurs connectés sont exemptés : l’éditeur de blocs et les écrans d’administration fonctionnent normalement. Cela n’a d’importance que si une intégration externe lit votre liste d’utilisateurs sans se connecter.

Puis-je conserver les pages d’archives d’auteur ?

Oui. Vous pouvez bloquer les scans par numéro ?author= tout en gardant les archives /author/nom/. Pour masquer complètement les noms, donnez aux auteurs un nom affiché et un slug d’auteur différents de leur identifiant de connexion.

Pourquoi les messages d’erreur de connexion ont-ils de l’importance ?

Par défaut, WordPress indique si c’est l’identifiant ou le mot de passe qui était erroné. Cela confirme quels identifiants existent. Des messages identiques dans les deux cas suppriment cet indice.

Signaler un bug ou demander une fonctionnalité

Votre message arrive directement à l’équipe qui développe Hushfort.

De quoi s’agit-il ?

Utilisé uniquement pour vous répondre.

Nous utilisons ces informations uniquement pour vous répondre. Confidentialité