kulturbanause Blog

Responsive Design, WordPress, Konzeption, HTML, CSS, JS & UX/UI …

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.

Workshops und Seminare von kulturbanause

Visual Prototyping, Responsive Design, CSS Grid & Flexbox, Sketch, Adobe XD …

Jetzt Frühbucher-Rabatte sichern!

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.

Jetzt bist du gefragt!

Hast du Anregungen, Ergänzungen, einen Fehler gefunden oder ist dieser Beitrag nicht mehr aktuell? Dann freuen wir uns auf deinen Kommentar.

Du kannst diesen Beitrag natürlich auch weiterempfehlen. Wir sind dir für jede Unterstützung dankbar!

Unterstützung bei WordPress-Projekten

Unsere WordPress Agentur ist auf die Entwicklung maßgeschneiderter WordPress-Themes und -Websites spezialisiert. Wenn du Unterstützung bei der Planung, Gestaltung und Entwicklung eines Projekts benötigst, helfen wir gerne weiter.
WordPress-Leistungsangebot →

Das könnte dich auch interessieren

3 Kommentare

  1. Torsten Landsiedel

    Verfasst am 28. März 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.

    • Jonas Hellwig

      Verfasst am 29. März 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.

  2. Stefan

    Verfasst am 29. März 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. ;-)

Kommentar verfassen

Dieser Blog lebt vom Feedback der Besucher! Also los, mach mit!
Bitte habe Verständnis dafür, dass Kommentare die mit dem Inhalt dieses Beitrags nichts zu tun haben, gelöscht werden.