WordPress REST API: Deaktiviere diese Sicherheitslücke!

Keine Kommentare
WordPress REST-API Sicherheitslücke deaktivieren

Die WordPress REST API ist eine wunderbare Sache und wird für viele WordPress-Funktionen benötigt. Allerdings ist sie auch eine Sicherheitslücke, denn potenzielle Angreifer können so wichtige Daten auslesen. Hier erfährst Du, wie Du dieses Sicherheitsproblem schliessen kannst.

Die REST-API bietet viele Möglichkeiten Inhalte auszulesen und diese können dann an externe Apps oder Websites übergeben werden. Dazu stellt die API strukturierte Daten (JSON) öffentlich zur Verfügung. Dazu gehören jedoch auch Daten, die man nicht gern für jedermann öffentlich abrufbar sehen möchte.

Das Problem: mit der WordPress REST API lassen sich Usernamen anzeigen

Mit einem einfachen Kniff können die Benutzernamen der User-Accounts von WordPress ausgelesen werden. Das stellt ein ernsthaftes Sicherheitsproblem dar, denn so benötigen eventuelle Angreifer nur noch das User-Passwort für einen Hack der betreffenden Website. Gibt man folgendes in den Browser folgendes ein, erhält man die Datei mit den Usernamen:

https://www.deine-website.de/wp-json/wp/v2/users

So sehen dann die Daten aus, die daraufhin im Browser erscheinen: (nur etwas hübscher formatiert)

WordPress REST-API Sicherheitslücke deaktivieren - Die Ausgabe der Benutzernamen im JSON-Format

Die Ausgabe der Benutzernamen im JSON-Format

Hier sieht man unter »Slug« den Benutzernamen mit vielen weiteren Informationen. Da der Benutzername nun bekannt ist, kann ein Angreifer eine Brute-Force Attacke gegen den Adminbereich starten, um so das User-Passwort zu erhalten und in die Website eindringen zu können. Mit anderen Abfragen wiederum können die Inhalte von Seiten und Beiträgen ausgelesen werden. Das eignet sich dann perfekt für den Content-Diebstahl.

Weitere Informationen zum Thema

WordPress REST API Referenz

WordPress REST API ganz abschalten? Besser nicht!

Man könnte nun auf die Idee kommen, die WordPress REST-API ganz abzuschalten. Das sollte man jedoch auf keinen Fall tun, da viele WordPress-Funktionen ansonsten nicht mehr möglich sind.

Der Gutenberg-Editor (auch Block-Editor genannt) ist von der REST-API Schnittstelle abhängig und würde ohne sie nicht mehr funktionieren. Ebenfalls nutzen auch etliche Plugins diese Funktionalitäten der API. Daher ist es definitiv keine gute Idee, diese API komplett abzuschalten.

So geht es richtig: REST-API für externe Besucher deaktivieren

Wichtig ist, dass die Plugins und der Gutenberg-Editor die Funktionen aufrufen können, die sie benötigen. Daher sollte die API nur für externe Besucher deaktiviert werden. Im eingeloggten Zustand funktioniert dann alles wie gewohnt. Das folgende Snippet muss in die functions.php des aktiven (Child-) Themes. Wie Du ein Child-Theme erstellst kannst Du hier nachlesen.

Mit diesem Code Snippet schaltest Du die Schnittstelle für externe Besucher ab:

<?php
/* Ab hier kopieren */
/**
 * REST-API fuer extere User abschalten
 */
add_filter('rest_authentication_errors', function($result) {
if ( ! is_user_logged_in() ) {
return new WP_Error( 'rest_API_cannot_access', array( 'status' => rest_authorization_required_code() ) );
}
return $result;
});

Statt alles zu deaktivieren: Schalte einzelne Endpoints ab

Alle Inhalte einer WordPress-Installation werden für die WordPress REST-API verfügbar gemacht. Das ist der Standard. Wie bereits oben erwähnt lassen sich damit auch die Inhalte der Beiträge, Seiten und die Kommentare auslesen. Dazu kommen noch die Website-Einstellungen und so weiter...

Mittels WordPress-Filter können wir jedoch genau bestimmen, was von außen abgerufen werden kann. Hier nutzen wir den Filter rest_endpoints. Alles Wissenswerte dazu liest Du in der WordPress REST API Referenz.

Wir deaktivieren die API-Endpunkte für:

  • Benutzernamen
  • Einstellungen
  • Seiteninhalte
  • Beitragsinhalte

Danach sind die Informationen nicht mehr in der API zu finden. Hier der Code dafür:

<?php

/* Ab hier kopieren */
/**
 * REST-API Filter entfernt wichtige Informationen fuer den Zugriff von Aussen
 * @link https://developer.wordpress.org/rest-api/reference/ REST-API Referenz
 */
add_filter('rest_endpoints', function ($endpoints) {
  $endpoints_to_remove = array(
    'users', /* Entfernt die User aus den Daten */
    'settings', /* Entfernt die Website-Einstellungen aus den Daten */
    'posts', /* Entfernt die Beitragsinhalte aus den Daten */
    'pages' /* Entfernt die Seiteninhalte aus den Daten */  
  );

  foreach ($endpoints_to_remove as $endpoint) {
    $base_endpoint = "/wp/v2/{$endpoint}";
    foreach ($endpoints as $maybe_endpoint => $object) {
      if (strpos($maybe_endpoint, $base_endpoint) !== false) {
        unset($endpoints[$maybe_endpoint]);
      }
    }
  }

  return $endpoints;
});

WordPress REST API Sicherheitslücke deaktivieren: Plugin Download

Du kannst allerdings auch mein kleines Plugin installieren, was ich Dir erstellt habe. Es beinhaltet nur den Code, der die Informationen zu den Einstellungen, den Benutzernamen und den Inhalten der Seiten und Beiträge herausfiltert und macht Deine Website also nicht langsamer.

Keine Information mehr verpassen

Für den Newsletter anmelden, um jeden Monat tolle Inhalte und wichtige Infos zu bekommen.

Wir senden keinen Spam! Erfahre mehr in unserer Datenschutzerklärung.

Andreas Hecht

Andreas Hecht

Andreas ist der Gründer und CEO der SEO Agentur Hamburg und Experte für Suchmaschinenoptimierung und WordPress Entwicklung.

Du bist auf der Suche nach einer seriösen SEO Agentur?

Dir hat unser Artikel gefallen und Du möchtest unsere Hilfe in Anspruch nehmen? Dann melde dich bei unverbindlich bei uns. Wir freuen uns auf Deine Anfrage!

Jetzt weitere interessante Beiträge lesen

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Bitte füllen Sie dieses Feld aus.
Bitte füllen Sie dieses Feld aus.
Bitte gib eine gültige E-Mail-Adresse ein.
Sie müssen den Bedingungen zustimmen, um fortzufahren.