WordPress REST API absichern

Sprungmarken
  1. Zugangskontrolle

Security Sicherheit

WordPress kommt von Haus aus mit der REST API daher. Diese birgt unter Umständen einen Angriffspunkt. Zwar liefert die API ohne Zugangskontrolle nur Daten, die sowieso öffentlich zugänglich sind, Bots können die Abfragen aber automatisiert durchführen, um diese dann für Angriffe zu nutzen.

In vielen Tipps zum Absichern von WordPress liest man, dass beispielsweise der Nutzernamen „admin“ geändert werden soll, da Angreifer gerne versuchen, darüber in das WordPress-Backend zu kommen. Viele Blogger haben das gemacht, lassen aber im gleichen Atemzug die Wordpress REST API offen. Über diese lassen sich dann öffentlich u.a. sämtliche Nutzernamen des Blogs auslesen.

Passt folgende URLs auf eure WordPress-Site an und seht selbst.

https://www.deineurl.de/wp-json/
https://www.deineurl.de/wp-json/wp/v2/users/

Auch im Falle von Denial of Service-Angriffen liefert die REST API einen Angriffspunkt, der die Datenbank unnötig belastet.

Man sollte die REST-API dennoch nicht komplett deaktivieren, da dies die (zukünftige) WordPress Admin-Funktionalität beeinträchtigen würde, die von der aktiven API abhängt.

ⓘ Es kann zudem durchaus sein, dass ihr Plugins nutzt, die auf die REST API setzen. In der Regel sollte euch das bekannt sein. Denkt hier eventuell über Alternativen nach.

Zugangskontrolle

Blogbetreiber können einen Filter einsetzen, um beim Zugriff auf die API zu verlangen, dass API-Konsumenten authentifiziert werden müssen. Das verhindert einen anonymen externen Zugriff, gewährt aber die Funktionsfähigkeit der REST API sobald man eingeloggt ist.

Realisiert wird dies mit folgendem Code, der i.d.R. in die functions.php eures Themes eingefügt werden muss.

add_filter( 'rest_authentication_errors', function( $result ) {
if ( ! empty( $result ) ) {
return $result;
}
if ( ! is_user_logged_in() ) {
return new WP_Error( 'rest_not_logged_in', 'You are not currently logged in.', array( 'status' => 401 ) );
}
return $result;
});

Die Implementierung kann überprüft werden, indem ihr folgende URL einmal eingeloggt und einmal ausgeloggt aufruft. Seid ihr nicht eingeloggt, sollte euch der Zugriff zur REST API eures Blogs verweigert werden.

https://www.deineurl.de/wp-json/
3 Kommentare
  1. kaiserkiwi

    Danke für den Tipp. Sowas übersieht man gerne mal.

  2. Günter Born

    Hm, bei mir wird nix über die REST API angezeigt und beim Auflisten der Benutzernamen kommt, dass ich nicht berechtigt bin, so was aufzulisten.

    Erinnere mich nicht, das ich den obigen Code in die function.php eingetragen hätte. Schätze, dass es durch ein Plugin wie WordFence oder ähnlich erledigt wird.

    Trotzdem sehr interessant, der Beitrag.

    1. René

      Ich gehe auch davon aus, dass ein Sicherheitsplugin das bereits vollzieht. Zumindest sollte ein solches Plugin eine Option dafür anbieten. Ich bin zwar kein Freund solcher Erweiterungen, aber für den Laien ist es manchmal nicht schlecht.

Schreibe einen Kommentar    

Deine E-Mail-Adresse wird nicht veröffentlicht. Durch das Absenden eines Kommentars stimmst du der Speicherung deiner Angaben gemäß der Datenschutzerklärung zu.

Du bist hier: FLIP.de / Coding & Publishing / ...