Hushfort

Wie verberge ich Benutzernamen in WordPress und verhindere User Enumeration?

Von Eureka Studio · Aktualisiert

Kurze Antwort

WordPress zeigt Benutzernamen an vier öffentlichen Stellen: am REST-Endpunkt /wp-json/wp/v2/users, bei ?author=1-Weiterleitungen, in den URLs der Autorenarchive und in der Benutzer-Sitemap. Um sie zu verbergen, blockiere die REST-Liste für abgemeldete Besucher, stoppe ?author=-Scans, entferne die Benutzer-Sitemap und vereinheitliche die Login-Fehlermeldungen. Ein Plugin kann alle vier erledigen; teste danach jede Stelle.

Schritte

  1. 1Schritt 1

    Sehen, was WordPress heute preisgibt

    Rufe abgemeldet yoursite.com/wp-json/wp/v2/users auf. Bei einer Standardinstallation bekommst du eine JSON-Liste, in der im Feld slug der Login-Name jedes Autors steht.

    Die öffentliche REST-Benutzerliste unter yoursite.com/wp-json/wp/v2/users mit dem slug demo-admin
  2. 2Schritt 2

    Den Autoren-Scan ausprobieren

    Rufe jetzt yoursite.com/?author=1 auf. WordPress leitet auf /author/dein-benutzername/ weiter und schreibt den Namen damit in die Adressleiste. Bots zählen 1, 2, 3 hoch und sammeln so jeden Benutzer ein.

    yoursite.com/?author=1 leitet auf yoursite.com/author/demo-admin/ weiter, eine Autorenseite mit dem Titel Author: demo-admin
  3. 3Schritt 3

    Die vier Stellen schließen

    Öffne Hushfort → Angriffsflächen-Härtung und schalte sie ein. Lass „REST-Benutzerliste“, „Autoren-Scan“ („?author=1-Scans blockieren“), „Autorenliste in der Sitemap“ und „oEmbed-Autorinfo“ aktiviert und speichere.

    Einstellungen der Angriffsflächen-Härtung: REST-Benutzerliste für abgemeldete Besucher blockiert, Autoren-Scans blockiert, Autorenliste in der Sitemap und oEmbed-Autorinfo entfernt
  4. 4Schritt 4

    In einem privaten Fenster erneut testen

    Wiederhole dieselben Anfragen abgemeldet. Die Benutzerliste antwortet jetzt mit „rest_no_route“ und dem Status 404, und ?author=1 leitet nicht mehr auf einen Benutzernamen weiter.

    Dieselbe Adresse der REST-Benutzerliste antwortet jetzt mit rest_no_route und dem Status 404

Warum das wichtig ist

Für einen Login braucht ein Angreifer zwei Dinge: einen Benutzernamen und ein Passwort. WordPress liefert die erste Hälfte von Haus aus mit. Das ist kein Fehler; jede dieser Stellen hat ihren Grund (Feeds für Apps, schöne Autoren-URLs, Suchmaschinen). Zusammen erlauben sie aber jedem Bot, in Sekunden eine Liste aller Login-Namen deiner Website zu erstellen. Wer die Benutzernamen in WordPress verbirgt, nimmt Angreifern diese Hälfte wieder weg.

Benutzernamen zu verbergen macht ein schwaches Passwort nicht sicher. Es nimmt aber die leichte Hälfte des Rätsels weg, sodass jeder Rateversuch Name und Passwort treffen muss. Zusammen mit Login-Limits und Zwei-Faktor-Login wird Raten damit von langsam zu aussichtslos.

Die vier Stellen, an denen WordPress Benutzernamen veröffentlicht:

  1. REST-API – /wp-json/wp/v2/users listet Autoren mit ihrem Slug auf, der meist dem Login-Namen entspricht.
  2. Autoren-Scans – /?author=1 leitet auf /author/login-name/ weiter.
  3. Autorenarchive – die Archiv-URL selbst enthält den Autoren-Slug.
  4. Sitemap – /wp-sitemap-users-1.xml listet die URLs der Autorenarchive auf. Auch oEmbed-Antworten können Autorinformationen enthalten.

Häufige Fehler

  • Eine Stelle reparieren und es dabei belassen. ?author= zu schließen, während die REST-Liste offen bleibt, ändert für einen Bot nichts. Prüfe alle vier.
  • Öffentlicher Name gleich Login-Name. Selbst wenn jede Lücke geschlossen ist, verrät ein Theme, das „Posted by admin“ ausgibt, den Namen. Lege unter Benutzer → Profil einen anderen öffentlichen Namen fest.
  • Echte Autorenseiten kaputtmachen. In einem Blog mit mehreren Autoren sind Autorenarchive nützlich. Blockiere die Zahlenscans statt der Archive selbst.
  • Detaillierte Login-Fehler. „Das Passwort, das du für den Benutzernamen jane eingegeben hast, ist nicht korrekt“ bestätigt, dass der Name existiert. Verwende eine Meldung für beide Fälle.

Ohne Plugin

Das meiste davon lässt sich mit einem Must-use-Plugin abdecken (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.';
} );

Einschränkungen: Teste das zuerst auf einer Staging-Website, denn Themes und Plugins lesen manchmal die REST-Benutzerliste. Der Autoren-Slug in den Archiv-URLs ändert sich dadurch nicht; dafür musst du den Nicename jedes Autors ändern oder ein Plugin für öffentliche Namen nutzen. Und es ist eine Datei mehr, an die du denken musst, wenn du die Website umziehst oder neu aufbaust.

Wenn etwas schiefgeht

  • Eine Integration hat ihre Autorenliste verloren. Manche externen Werkzeuge lesen /wp/v2/users ohne Anmeldung. Gib ihnen ein Anwendungspasswort, damit sie sich authentifizieren, oder erlaube die Liste wieder.
  • Autorenseiten zeigen einen 404-Fehler. Du hast gewählt, Autorenarchive komplett zu deaktivieren. Wechsle zur Option, die nur Zahlenscans blockiert.
  • Das SEO-Plugin listet weiter Autoren auf. Viele SEO-Plugins erzeugen eine eigene Autoren-Sitemap. Schalte Autoren-Sitemaps auch in diesem Plugin ab.

Mit Hushfort

Der Benutzernamen-Schutz gehört zu Hushfort Pro. Der Angriffsflächen-Scan, der zeigt, was noch durchsickert, steckt in Hushfort Security, dem kostenlosen WordPress-Sicherheitsplugin.

Der Benutzernamen-Schutz, Teil der Ebene Angriffsflächen-Härtung von Hushfort, schließt alle vier Stellen auf einer einzigen Seite:

  • blockiert die REST-Liste /wp/v2/users für Besucher, die nicht angemeldet sind,
  • blockiert ?author=N-Scans und behält die Archive unter /author/name/ (oder deaktiviert die Archive ganz, wenn du das vorziehst),
  • entfernt die Benutzer-Sitemap und Autorendetails aus oEmbed-Antworten,
  • macht die Login-Fehlermeldungen bei falschem Benutzernamen und falschem Passwort identisch.

Anschließend testet der Angriffsflächen-Scan jede Stelle mit echten Anfragen und nennt jeden Benutzernamen, der noch durchsickert.

Häufige Fragen

Was ist User Enumeration in WordPress?

Das Einsammeln der Login-Namen einer Website über öffentliche URLs wie ?author=1 oder die REST-Benutzerliste. Sind die Namen bekannt, müssen Angreifer nur noch Passwörter erraten.

Ist es ein Sicherheitsrisiko, wenn mein Benutzername sichtbar ist?

Für sich genommen nicht, aber es nimmt Angreifern die Hälfte des Ratens ab. Namen zu verbergen ist ein kleiner Härtungsschritt; die Hauptarbeit leisten starke Passwörter, Login-Limits und Zwei-Faktor.

Macht das Blockieren der REST-Benutzerliste den Editor kaputt?

Nein. Angemeldete Benutzer sind ausgenommen, Block-Editor und Admin-Seiten funktionieren also wie gewohnt. Es spielt nur eine Rolle, wenn eine externe Integration deine Benutzerliste ohne Anmeldung abruft.

Kann ich die Autorenarchiv-Seiten behalten?

Ja. Du kannst ?author=-Zahlenscans blockieren, während die Archive unter /author/name/ weiter funktionieren. Um Namen ganz zu verbergen, gib Autoren einen öffentlichen Namen und einen Autoren-Slug, die sich von ihrem Login unterscheiden.

Warum sind die Login-Fehlermeldungen wichtig?

Standardmäßig sagt WordPress, ob der Benutzername oder das Passwort falsch war. Damit bestätigt es, welche Benutzernamen existieren. Eine identische Meldung für beide Fälle beseitigt diesen Hinweis.

Fehler melden oder Funktion wünschen

Deine Nachricht geht direkt an das Team, das Hushfort entwickelt.

Worum geht es?

Nur für unsere Antwort an dich.

Wir nutzen diese Angaben nur, um dir zu antworten. Datenschutz