it-swarm.com.de

Sicher deaktivieren WP REST API

Ich überlege, die Sicherheit meiner Wordpress-Website zu verbessern, und dabei bin ich auf die API WP REST gestoßen, die standardmäßig aktiviert ist (seit WP 4.4, wenn ich mich nicht irre).

Wie kann ich das sicher deaktivieren?

Mit "sicher" meine ich, dass es keine unerwarteten Nebenwirkungen verursacht, z. bricht keine anderen Kernfunktionen WP.

Ein möglicher Ansatz wäre die Verwendung von .htaccess-Umschreibungsregeln, aber überraschenderweise habe ich keine "offiziellen" Anweisungen dazu gefunden.

Jede Hilfe oder Empfehlung wird sehr geschätzt :)

Update: Plugins von Drittanbietern sind nicht die Lösung, die ich suche. Obwohl mir bewusst ist, dass es viele gibt, die die Aufgabe lösen, enthalten sie viele zusätzliche Funktionen, die die Website verlangsamen. Ich würde hoffen, dass es eine einzeilige Lösung für dieses Problem gibt, ohne dass ein zusätzliches Plugin anfällt.

Update 2: Hier ist die offizielle Meinung von Wordpress: https://developer.wordpress.org/rest-api/using-the-rest-api/frequently-asked-questions/#can -i-disable-the-rest-api

Demnach möchte das Wordpress-Team, dass die zukünftige WP -Funktionalität von der neuen REST -API abhängt. Dies bedeutet, dass es keine garantiert sichere Methode gibt, um die REST - API zu deaktivieren.

Hoffen wir einfach, dass es genügend Sicherheitsexperten gibt, die sich um WP Sicherheit kümmern.

Update 3:

Eine Problemumgehung wird im WordPress-API-Handbuch beschrieben. Sie können Authentifizierung für alle Benutzer erforderlich machen

Dadurch wird sichergestellt, dass der anonyme Zugriff auf die API REST Ihrer Website deaktiviert ist. Nur authentifizierte Anforderungen funktionieren.

17
Eric Gopak

Aus der ursprünglichen Frage des Autors habe ich die Option 2 ausgewählt, die aus offiziellen Empfehlungen von WordPress stammt ( https://developer.wordpress.org/rest-api/using-the-rest-api/frequently-asked-questions/#can -i-disable-the-rest-api ). Geben Sie einfach Ihre functions.php ein, damit nur angemeldete Benutzer die restliche API verwenden können:

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;
});
5
Dzmitry Hubin

Das Deaktivieren von REST API war schließlich keine schlechte Idee. Es öffnete tatsächlich ein großes Loch in allen Websites !

In wordpress 4.4 es gab einen Weg

Hier, Ich habe eine mögliche Lösung mit .htaccess Gefunden , sollte aber sorgfältig in Kombination mit den anderen Elementen in Ihrer .htaccess - Datei getestet werden (z. B. Pretty-Url-Regeln) hinzugefügt von wordpress selbst):

# WP REST API BLOCK JSON REQUESTS 
# Block/Forbid Requests to: /wp-json/wp/
# WP REST API REQUEST METHODS: GET, POST, PUT, PATCH, DELETE
RewriteCond %{REQUEST_METHOD} ^(GET|POST|PUT|PATCH|DELETE) [NC]
RewriteCond %{REQUEST_URI} ^.*wp-json/wp/ [NC]
RewriteRule ^(.*)$ - [F]

Eine sehr drastische Methode ist es auch, eine 404.html - Webseite in Ihrem Stammverzeichnis zu haben und dann diese Zeile hinzuzufügen:

# WP REST API BLOCK JSON REQUESTS 
# Redirect to a 404.html (you may want to add a 404 header!) 
RewriteRule ^wp-json.*$ 404.html

Beachten Sie, dass Sie, sofern Sie keine statische Seite verwenden, dh nicht an WordPress-Funktionen beteiligt sind, einen 404 - Fehler mit zurückgeben möchten eine entsprechende Fehlerseite, dies ist ein komplett separates Thema mit viele Probleme, wenn Wordpress ist beteiligt

10
Kuzeko

Sie können es für die Ausführung anderer Anforderungen als localhost in functions.php deaktivieren:

/**
*    Disables WordPress Rest API for external requests
*/
function restrict_rest_api_to_localhost() {
    $whitelist = array('127.0.0.1', "::1");

    if(!in_array($_SERVER['REMOTE_ADDR'], $whitelist)){
        die('REST API is disabled.');
    }
}
add_action( 'rest_api_init', 'restrict_rest_api_to_localhost', 1 );
7

Mit dem Plugin " Disable REST API " können Sie auswählen, welche APIs Sie aktivieren möchten, z. das Kontaktformular 7 API. Siehe die Einstellungen des Plugins (yoursite.com/wp-admin/options-general.php?page=disable_rest_api_settings).

1
Benno