WordPress REST API absichern

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/

Teilen

Du bist hier: / / ...