WordPress REST-API deaktivieren
Die WordPress REST-API ist ein spannendes Thema. Grundsätzlich soll die API eine einfach zu erweiternde Schnittstelle für die Kommunikation mit anderen Programmen bereitstellen. Mit WordPress Version 4.4 wurde die grundlegende REST-API-Infrastruktur in den WordPress-Core integriert. Die gestern veröffentlichte Version 4.7 integriert sogenannte Inhalts-Endpunkte, welche bisher nur über ein separates Plugin vorhanden waren. Durch die Endpoints können andere Programme mit WordPress interagieren und bestimmte Informationen ein- oder auslesen.
Die REST-API ist unter der URL “http://www.meine-seite.de/wp-json/” erreichbar. Das Auslesen der Artikel ist beispielsweise folgendermaßen möglich: “https://www.meine-seite.de/wp-json/wp/v2/posts”.
Wer eine Webseite mit WordPress betreibt und die REST-API nicht nutzt, möchte die API vielleicht lieber deaktivieren. Die API komplett zu deaktivieren ist keine gute Idee, da mittlerweile immer mehr Funktionen im Backend die REST-API benötigen. Allerdings lässt sich die API so umbiegen, dass sie nur von angemeldeten Benutzern verwendet werden kann. Dies ist relativ einfach möglich und erfordert nur ein paar Zeilen Code, die in der “functions.php” eures Themes bzw. Child-Themes eingefügt werden müssen.
/* ------------------------------------------------------------------------- *
* Returning an authentication error if a user who is not logged in tries to query the REST API
/* ------------------------------------------------------------------------- */
function only_allow_logged_in_rest_access( $access ) {
if( ! is_user_logged_in() ) {
return new WP_Error( 'rest_API_cannot_access', 'Only authenticated users can access the REST API.', array( 'status' => rest_authorization_required_code() ) );
}
return $access;
}
add_filter( 'rest_authentication_errors', 'only_allow_logged_in_rest_access' );
remove_action( 'wp_head', 'rest_output_link_wp_head', 10 );
remove_action( 'template_redirect', 'rest_output_link_header', 11 );
remove_action( 'xmlrpc_rsd_apis', 'rest_output_rsd' );
Die unteren drei Zeilen sorgen dafür, dass der Ausgangspunkt der REST-API nicht im Quellcode, Header und unter der XMLRPC-Schnittstelle publiziert wird.
Sie sehen gerade einen Platzhalterinhalt von X. Um auf den eigentlichen Inhalt zuzugreifen, klicken Sie auf die Schaltfläche unten. Bitte beachten Sie, dass dabei Daten an Drittanbieter weitergegeben werden.
Mehr Informationen
Hi Tobi,
dein Code spuckt bei mir für Zeile 6 aus:
syntax error, unexpected ‘=’, expecting ‘)’
Das ist die Zeile beginnend mit “return new WP_Error”.
Sorry da hat das WordPress-Backend einen Fehler eingebaut. Jetzt sollte es passen!
Bei mir funktionierte anschließend das Plugin Contact Form 7 https://de.wordpress.org/plugins/contact-form-7/ nicht mehr. Das Plugin benötigt die REST-API offensichtlich. Wer Kontakt per Kontaktformular aufnehmen möchte, ist natürlich nicht eingeloggt.
Danke für die interessante Info, habe ich noch nicht gewusst. Das Problem tritt erst ab Version 4.8 des Plugins auf. Wer also bei Version 4.7 bleibt hat keine Probleme.