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
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.
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.
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.
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.
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:
- REST API —
/wp-json/wp/v2/userssomt auteurs op met hun slug, die meestal gelijk is aan hun inlognaam. - Auteursscans —
/?author=1stuurt door naar/author/login-name/. - Auteursarchieven — de archief-URL zelf bevat de auteur-slug.
- Standaard sitemap —
/wp-sitemap-users-1.xmlsomt 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/userszonder 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/usersvoor 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?
Is het een beveiligingsrisico als mijn gebruikersnaam zichtbaar is?
Gaat de editor stuk als ik de REST-gebruikerslijst blokkeer?
Kan ik auteursarchiefpagina's behouden?
Waarom doen de foutmeldingen bij het inloggen ertoe?
Gerelateerde handleidingen
Hoe controleer ik wat mijn WordPress-site naar buiten laat zien?
Test je WordPress-site zoals een bot dat doet. Vijf verzoeken tonen of de login, XML-RPC en je gebruikersnamen openliggen, en hoe je dichtzet wat je vindt.
Bekijk de stappenWat is xmlrpc.php en hoe schakel ik het uit in WordPress?
xmlrpc.php is een tweede inlogdeur die een verborgen inlogpagina niet sluit. Zo schakel je XML-RPC veilig uit, behoud je pingbacks en test je het.
Bekijk de stappenHoe beperk ik het aantal inlogpogingen in WordPress?
Stop brute-force-aanvallen: blokkeer een IP na een paar mislukte inlogpogingen. Instellingen die werken, de handmatige code en de gaten om te dichten.
Bekijk de stappen



