Hushfort

Hoe verberg ik gebruikersnamen en stop ik user enumeration in WordPress?

Door Eureka Studio · Bijgewerkt op

Kort antwoord

WordPress toont gebruikersnamen op vier openbare plekken: het REST-endpoint /wp-json/wp/v2/users, doorverwijzingen via ?author=1, URL's van auteursarchieven en de standaard gebruikerssitemap. Om ze te verbergen blokkeer je de REST-lijst voor uitgelogde bezoekers, stop je ?author=-scans, verwijder je de gebruikerssitemap en maak je foutmeldingen bij het inloggen gelijk. Een plugin kan alle vier regelen; test daarna elke plek.

Stappen

  1. 1Stap 1

    Kijk wat WordPress nu laat zien

    Ga uitgelogd naar yoursite.com/wp-json/wp/v2/users. Bij een standaardinstallatie krijg je een JSON-lijst met de inlognaam van elke auteur in het veld slug.

    De openbare REST-gebruikerslijst op yoursite.com/wp-json/wp/v2/users met slug demo-admin
  2. 2Stap 2

    Probeer de auteursscan

    Ga nu naar yoursite.com/?author=1. WordPress stuurt door naar /author/jouw-gebruikersnaam/ en zet de naam zo in de adresbalk. Bots tellen op, 1, 2, 3, om elke gebruiker te verzamelen.

    yoursite.com/?author=1 doorgestuurd naar yoursite.com/author/demo-admin/, een auteurspagina met de titel Auteur: demo-admin
  3. 3Stap 3

    Sluit de vier plekken af

    Open Hushfort → Oppervlakbeveiliging en zet het aan. Laat REST-gebruikerslijst, Auteursscan ("?author=1-scans blokkeren"), Auteurslijst in sitemap en Auteursinfo in oEmbed ingeschakeld en sla op.

    Instellingen van Oppervlakbeveiliging: REST-gebruikerslijst geblokkeerd voor uitgelogde bezoekers, auteursscans geblokkeerd, auteurslijst in sitemap en auteursinfo in oEmbed verwijderd
  4. 4Stap 4

    Test opnieuw vanuit een privévenster

    Herhaal dezelfde verzoeken terwijl je bent uitgelogd. De gebruikerslijst antwoordt nu met "rest_no_route" en een 404, en ?author=1 stuurt niet meer door naar een gebruikersnaam.

    Hetzelfde adres van de REST-gebruikerslijst antwoordt nu met rest_no_route en status 404

Waarom het ertoe doet

Om in te loggen heeft een aanvaller twee dingen nodig: een gebruikersnaam en een wachtwoord. WordPress geeft de eerste helft standaard gewoon weg. Het is geen bug; elke plek heeft een reden (feeds voor apps, mooie auteurs-URL's, zoekmachines). Maar samen laten ze elke bot binnen enkele seconden een lijst maken van alle inlognamen op je site.

Gebruikersnamen verbergen maakt een zwak wachtwoord niet veilig. Wat het wel doet, is de makkelijke helft van de puzzel weghalen, zodat elke gok zowel een naam als een wachtwoord moet raken. Samen met inloglimieten en tweefactorauthenticatie maakt dat raden niet alleen traag, maar kansloos.

De vier plekken waar WordPress gebruikersnamen publiceert:

  1. REST API — /wp-json/wp/v2/users somt auteurs op met hun slug, die meestal gelijk is aan hun inlognaam.
  2. Auteursscans — /?author=1 stuurt door naar /author/login-name/.
  3. Auteursarchieven — de archief-URL zelf bevat de auteur-slug.
  4. Standaard sitemap — /wp-sitemap-users-1.xml somt de URL's van auteursarchieven op. Ook oEmbed-antwoorden kunnen auteursinformatie bevatten.

Veelgemaakte fouten

  • Eén plek dichten en het daarbij laten. ?author= afsluiten terwijl de REST-lijst open blijft, verandert voor een bot niets. Controleer alle vier.
  • Weergavenaam gelijk aan inlognaam. Ook als elk lek dicht is, verraadt een thema dat "Geplaatst door admin" toont de naam. Stel een andere weergavenaam in onder Gebruikers → Profiel.
  • Echte auteurspagina's breken. Op een blog met meerdere schrijvers zijn auteursarchieven nuttig. Blokkeer dan de scans op nummer in plaats van de archieven zelf.
  • Gedetailleerde foutmeldingen bij inloggen. "Het wachtwoord dat je hebt ingevoerd voor de gebruikersnaam jane is onjuist" bevestigt dat de naam bestaat. Gebruik één melding voor beide gevallen.

Zonder plugin

Het meeste hiervan kun je afdekken met een must-use-plugin (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.';
} );

Kanttekeningen: test het eerst op een stagingsite, want thema's en plugins lezen soms de REST-gebruikerslijst. Dit verandert de auteur-slug in archief-URL's niet; daarvoor wijzig je de nicename van elke auteur of gebruik je een plugin voor weergavenamen. En het is weer een bestand om in de gaten te houden als je de site verhuist of opnieuw opbouwt.

Als er iets misgaat

  • Een integratie is zijn auteurslijst kwijt. Sommige externe tools lezen /wp/v2/users zonder in te loggen. Geef ze een applicatiewachtwoord zodat ze zich aanmelden, of sta de lijst weer toe.
  • Auteurspagina's geven een 404. Je hebt ervoor gekozen auteursarchieven volledig uit te schakelen. Kies de optie die alleen scans op nummer blokkeert.
  • De SEO-plugin toont nog steeds auteurs. Veel SEO-plugins maken hun eigen auteurssitemap. Schakel auteurssitemaps ook in die plugin uit.

Met Hushfort

Het Gebruikersnaamschild is onderdeel van Hushfort Pro. De Oppervlakscan, die laat zien wat er nog uitlekt, zit in Hushfort Security, de gratis WordPress-beveiligingsplugin.

Het Gebruikersnaamschild, onderdeel van de laag Oppervlakbeveiliging van Hushfort, sluit alle vier de plekken af vanuit één scherm:

  • blokkeert de REST-lijst /wp/v2/users voor bezoekers die niet zijn ingelogd,
  • blokkeert ?author=N-scans en behoudt /author/name/-archieven (of schakelt archieven volledig uit, als je dat liever hebt),
  • verwijdert de standaard gebruikerssitemap en auteursgegevens uit oEmbed-antwoorden,
  • maakt de foutmeldingen bij het inloggen gelijk voor een verkeerde gebruikersnaam en een verkeerd wachtwoord.

Daarna test de Oppervlakscan elke plek met echte verzoeken en noemt hij elke gebruikersnaam die nog uitlekt.

Veelgestelde vragen

Wat is user enumeration in WordPress?

Het verzamelen van de inlognamen van een site via openbare URL's, zoals ?author=1 of de REST-gebruikerslijst. Zijn de namen bekend, dan hoeven aanvallers alleen nog wachtwoorden te raden.

Is het een beveiligingsrisico als mijn gebruikersnaam zichtbaar is?

Op zichzelf niet, maar het scheelt de helft van het raadwerk. Namen verbergen is een kleine verhardingsstap; sterke wachtwoorden, inloglimieten en tweefactorauthenticatie doen het zware werk.

Gaat de editor stuk als ik de REST-gebruikerslijst blokkeer?

Nee. Ingelogde gebruikers zijn uitgezonderd, dus de blokeditor en de beheerschermen werken gewoon. Het maakt alleen uit als een externe integratie je gebruikerslijst uitleest zonder in te loggen.

Kan ik auteursarchiefpagina's behouden?

Ja. Je kunt ?author=-scans op nummer blokkeren terwijl /author/naam/-archieven blijven werken. Wil je namen volledig verbergen, geef auteurs dan een weergavenaam en auteur-slug die afwijken van hun inlognaam.

Waarom doen de foutmeldingen bij het inloggen ertoe?

Standaard zegt WordPress of de gebruikersnaam of het wachtwoord fout was. Daarmee bevestigt het welke gebruikersnamen bestaan. Identieke meldingen voor beide nemen die aanwijzing weg.

Meld een bug of vraag een functie aan

Je bericht gaat rechtstreeks naar het team dat Hushfort bouwt.

Waar gaat het over?

Alleen gebruikt om je te antwoorden.

We gebruiken deze gegevens alleen om je te antwoorden. Privacy