WordPress »User Enumeration« verhindern

In vielen WordPress-Installationen ist es kein großes Problem die Benutzernamen der registrierten Benutzer in Erfahrung zu bringen. Das ist vor allem ein Problem in Bezug auf die Sicherheit der Website, da so schon die erste Hürde für einen Angriff überwunden ist. In diesem Beitrag stellen wir euch ein Snippet bereit, mit dem ihr verhindern könnt, dass die Benutzernamen ausgelesen werden können.

Wie funktioniert die WordPress »User Enumeration«?

Eine simple Möglichkeit in einer ungeschützten WP-Installation die Benutzernamen auszulesen, erfolgt über die URL. WordPress stellt standardmäßig in der Template-Hierachie Seitentypen für Autoren bereit (author.php). Wenn die author.php nicht vorhanden sein sollte, sucht WordPress nach dem übergeordneten Template, bis irgendwann die index.php einspringt. Es ist daher nicht möglich, dass es kein Template für die Ansicht von Autoren gibt.

Mit folgender URL ruft man besagte Autorenseite für den Benutzer mit der ID 1 auf: http://domain.de/?author=1. Der Benutzer mit der ID 1 wird bei der Installation von WordPress angelegt – die Wahrscheinlichkeit, dass es sich um einen Administrator handelt ist daher sehr groß.

Wenn nun in WordPress sprechende URLs eingestellt sind, so springt die URL bei der Eingabe der oben genannten Adresse automatisch auf eine Struktur wie diese um: http://domain.de/author/admin. Und schon ist der Benutzername bekannt.

Aufruf der Benutzer-URL über ID verhindern

Um die »User Enumeration« in WordPress zu verhindern, müsst ihr folgendes Snippet in eure functions.php oder in ein seitenspezifisches Plugin einfügen. Anschließend kann über die ID nicht mehr der Benutzername ausgelesen werden.

<?php
if ( ! is_admin() && isset($_SERVER['REQUEST_URI'])){
 if(preg_match('/(wp-comments-post)/', $_SERVER['REQUEST_URI']) === 0 && !empty($_REQUEST['author']) ) {
 wp_die('Du hast keine Rechte diese Adresse aufzurufen');
 }
}
?>

Um zu testen, ob eure Anpassung erfolgreich war, könnt ihr nun einfach eure Domain mit dem Anhang /?author=1 in die Adresszeile eures Browsers eingeben. Anschließend solltet ihr folgende Meldung erhalten:

Hinweis »No user enumeration«
Hinweis, dass Seite auf Grund von fehlenden Rechten nicht aufgerufen werden kann.

Bitte beachtet, dass es viele Themes gibt, die das o.g. Autoren-Template bewusste verlinken um Autoren-Seiten zu bilden. In diesem Fall erreicht man die URL trotzdem.

Benutzernamen aus Autor-CSS-Klasse der Kommentare entfernen

Schreibt ihr auf eurer Website einen Kommentar als Autor, schreibt WordPress eine »Autor-CSS-Klasse« in den Kommentar. Diese Klasse sieht wie folgt aus: comment-author-[USERNAME]. Um diese Klasse zu entfernen, müsst ihr folgendes Snippet in eure functions.php übernehmen.

<?php
function kb_remove_comment_author_class( $classes ) {
 foreach( $classes as $key => $class ) {
  if(strstr($class, "comment-author-")) {
   unset( $classes[$key] );
  }
 }
 return $classes;
}
add_filter( 'comment_class' , 'kb_remove_comment_author_class' );
?>

WordPress REST API schließen

Über die REST API von WordPress lassen sich ebenfalls die Benutzernamen der Autoren auslesen. Solltet ihr die REST API also nicht verwenden, könnt ihr die Schnittstelle schließen. Schreibt dazu folgendes Snippet in eure functions.php.

<?php
function kb_disable_wp_rest_api($access) {
 return new WP_Error( 'rest_API_cannot_access', array( 'status' => rest_authorization_required_code() ) );
 return $access;
}
add_filter( 'rest_authentication_errors','kb_disable_wp_rest_api');
?>

WordPress-Benutzernamen aus Login-Maske entfernen

Auch in der Login-Maske von WordPress kann der Benutzername auftauchen. Dazu haben wir hier bereits einen Beitrag veröffentlicht.

Bitte beachtet, dass es sich bei allen hier genannten Möglichkeiten um Verschleierungs-Methoden handelt.

Geschrieben von kulturbanause Team

Benutzerbild

Beiträge bei denen das kulturbanause-Team als Autor angegeben ist, wurden von mehreren Personen in Zusammenarbeit geschrieben. Wir nutzen diesen Blog als öffentliches Archiv und um euch bei alltäglichen Problemen im Zusammenhang mit der Erstellung von Websites zu helfen. Neben diesem Blog bieten wir auch Trainings wie Schulungen, Bücher oder Videos an. Und natürlich unterstützen wir auch gerne im Rahmen unserer Agenturtätigkeit.

Feedback & Ergänzungen – 6 Kommentare

  1. Peter
    schrieb am 09.08.2020 um 12:16 Uhr:

    Vielen Dank für diesen ausführlichen Beitrag, der mein Problem i. W. löst. Was müßte in dem ersten php-Code ergänzt werden um nicht die o. a. Fehlermeldung „Du hast keine Rechte…“ anzuzeigen, sondern direkt auf die Startseite (Home URL) umzuleiten und dies ohne weitere Meldungen?

    Antworten
  2. Chrisi
    schrieb am 08.11.2018 um 00:40 Uhr:

    Hey ho,

    wenn ich die Funktion „kb_disable_wp_rest_api“ meiner functions.php hinzufüge fünktioniert mein Kontaktformular (CF7) nicht mehr.

    Gibt es das eine Lösung, Workaround für?

    Antworten
    • Jonas Hellwig
      schrieb am 08.11.2018 um 11:45 Uhr:

      Das von dir beschriebene Problem war mir nicht bekannt – da wir nicht mit CF7 arbeiten. Aber CF7 scheint generell Ärger zu machen wenn die Rest API geschlossen wird! Siehe hier.

      Antworten
  3. Stefan
    schrieb am 29.03.2018 um 12:41 Uhr:

    Das ist mal eine geniale Anleitung für ein Problem mit/bei WordPress das mich schon seit längerem gestört hat. Da ich jedoch nicht so in dem Maße im Programmieren bewandert bin, konnte ich dieses Problem bisher nicht selbst lösen.
    Danke somit für diese gut geschriebene Anleitung.

    Enumeration, was für ein Wort.
    Musste erst mal selbst suchen um herauszufinden was sich hinter diesem umständlichen Begriff genau verbirgt.

    Deutsche Sprache, schwere Sprache. ;-)

    Antworten
  4. Torsten Landsiedel
    schrieb am 28.03.2018 um 23:32 Uhr:

    Wenn man die REST API offen lässt, dann nützt das herzlich wenig. ;)
    https://blog.kulturbanause.de//wp-json/wp/v2/users

    Und es gibt noch viele weitere Möglichkeiten den Benutzernamen preiszugeben:
    http://torstenlandsiedel.de/2016/02/28/sicherheitsmythos-anmeldenamen-in-wordpress-verstecken/

    Zwei-Faktor-Autorisierung ist hier deutlich sinnvoller als solche Schein-Lösungen, die keine echte Sicherheit bringen.

    Antworten
    • Jonas Hellwig
      schrieb am 29.03.2018 um 15:43 Uhr:

      Hallo Torsten,
      besten Dank für deinen Kommentar – die Rest API ist jetzt übrigens auch bei uns zu ;). Wir haben den Beitrag entsprechend angepasst. Zum Login-Screen und der 2-Faktor-Authentifizierung hatten wir in der Vergangenheit bereits geschrieben.

      Antworten

Kommentar zu dieser Seite

Wir freuen uns über Anregungen, Ergänzungen oder Hinweise zu Fehlern. Wir lesen jeden Eintrag, veröffentlichen aber nur, was den Inhalt sinnvoll ergänzt.

WordPress-Projekte mit kulturbanause

Wir wissen wovon wir reden. Wir setzen WordPress seit über 10 Jahren erfolgreich ein und realisieren maßgeschneiderte Websites auf Basis dieses großartigen CMS.

WordPress-Leistungsangebot →

Schulungen von kulturbanause

Wir bieten Seminare und Workshops zu den Themen Konzept, Design und Development. Immer up-to-date, praxisnah, kurzweilig und mit dem notwendigen Blick über den Tellerrand.

Übersicht Schulungsthemen →