Die WordPress REST API listet öffentlich die Plugins auf, die sie verwendet
Allgemeine Anleitung. Öffnen Sie diesen Artikel aus Ihrem PageCheck-Bericht, um ihn mit den Plugins, die der Index Ihrer Website nennt, und der Angabe, welche davon die Browser Ihrer Besucher nutzen, ausgefüllt zu sehen.
Was es ist
Die REST API von WordPress lässt Skripte die Website über Adressen unter /wp-json/ lesen und ändern: Der Block-Editor, Apps und viele Plugins nutzen sie. Ihr Index führt jeden „Namespace“ auf, den die Website registriert – eine Gruppe von Adressen –, und WordPress selbst gehören nur eine Handvoll davon. Jeder andere Namespace gehört zu einem Plugin.
Was falsch ist
Der Index antwortet jedem, der ihn anfragt, und seine Namespaces nennen die Plugins der Website. Mit dieser Liste muss ein Angreifer nicht raten: Als Nächstes wird die Version jedes Plugins aus seinen eigenen Dateien gelesen und mit den öffentlichen Listen bekannter Sicherheitslücken abgeglichen. Die Seite selbst zeigt nur die Plugins, die Dateien in sie laden; der Index nennt auch die, die das nicht tun – SEO-, Formular-, Backup-, Sicherheits- und Admin-Plugins.
So beheben Sie es
Die API bleibt; nur ihre Übersicht und die Teile, die Besucher nie aufrufen, werden vor allen verborgen, die nicht als Mitarbeiter angemeldet sind. Verborgene Adressen sollten mit „nicht gefunden“ (404) antworten, nicht mit „nicht autorisiert“ (401): Ein 401 bestätigt immer noch, dass das Plugin vorhanden ist.
1. Finden Sie heraus, welche Namespaces Ihre Seiten aufrufen. Öffnen Sie die Website in einem privaten Browserfenster, öffnen Sie die Entwicklertools des Browsers (F12) → Netzwerk, filtern Sie nach wp-json und nutzen Sie die Website wie ein Besucher: Senden Sie ein Formular, legen Sie etwas in den Warenkorb, öffnen Sie die Kasse, suchen Sie. Jede aufgeführte Anfrage nennt einen Namespace, den Sie behalten müssen.
Häufige:
- Contact Form 7 sendet seine Formulare über die REST API.
- Der blockbasierte Warenkorb, die Kasse und der Mini-Warenkorb von WooCommerce lesen die Store API (wc/store).
- Besucherzähler wie WP Statistics und WordPress Popular Posts erfassen Aufrufe darüber.
- Community-, Spenden- und Consent-Plugins (BuddyPress, GiveWP, Complianz) nutzen sie auf den Seiten.
2. Verbergen Sie den Rest vor Besuchern.
Speichern Sie dies als wp-content/mu-plugins/hide-rest-map.php (der Ordner muss eventuell erst angelegt werden; Dateien dort sind immer aktiv). Tragen Sie die Namespaces aus Schritt 1 in die Liste ein – jeder bleibt mit allem, was darunter liegt, erhalten.
wp-content/mu-plugins/hide-rest-map.php
<?php
/* Hide the REST API's map from visitors who are not logged in. */
add_filter( 'rest_endpoints', function ( $endpoints ) {
if ( current_user_can( 'edit_posts' ) ) {
return $endpoints; // staff keep everything
}
// Namespaces your pages call. Everything else answers 404 to visitors.
$keep = array( 'wc/store', 'contact-form-7/v1' );
foreach ( array_keys( $endpoints ) as $route ) {
$kept = false;
foreach ( $keep as $namespace ) {
if ( 0 === strpos( $route, '/' . $namespace . '/' ) ) {
$kept = true;
break;
}
}
if ( ! $kept ) {
unset( $endpoints[ $route ] );
}
}
return $endpoints;
}, 5 );
// No pointer to the API in the pages' head and headers.
remove_action( 'wp_head', 'rest_output_link_wp_head' );
remove_action( 'template_redirect', 'rest_output_link_header', 11 );
Wer Inhalte bearbeiten darf, behält die ganze API, sodass der Block-Editor, die Admin-Bildschirme von WooCommerce und anderen Plugins und der Website-Zustand wie bisher funktionieren. Sicherheits-Plugins bieten dasselbe als Einstellung („REST API für Besucher deaktivieren“ oder ähnlich); achten Sie darauf, dass sie eine Liste von Ausnahmen annimmt und mit 404 antwortet, nicht mit 401.
Nicht empfohlen: das verbreitete Snippet, das Besuchern die ganze API über rest_authentication_errors verweigert. Es macht Formulare und den Block-Warenkorb kaputt und antwortet trotzdem für jede Adresse mit 401, was bestätigt, dass jedes Plugin vorhanden ist.
3. Prüfen.
Öffnen Sie https://example.com/wp-json/ in einem privaten Fenster: Es sollte mit „nicht gefunden“ (404, rest_no_route) antworten. Senden Sie dann ein Formular und nutzen Sie den Warenkorb oder was Ihre Seiten sonst tun, und führen Sie diese Prüfung erneut aus.
Hide my WordPress site's REST API map from visitors who are not logged in, without breaking the features that use the API. https://example.com/wp-json/ currently answers anyone and lists every namespace, i.e. every plugin. Do this: 1. Find which namespaces the public pages call (forms, cart, checkout, view counters): grep the theme and plugins for wp-json / rest_url / apiFetch, and check the browser's network tab as a visitor. 2. Add a must-use plugin (wp-content/mu-plugins/hide-rest-map.php) with a rest_endpoints filter: when the user cannot edit_posts, unset every route except those under the kept namespaces (match '/<namespace>/' as a prefix of the route), so the index '/', every namespace index and the other routes answer 404 rest_no_route, never 401. Also remove_action wp_head rest_output_link_wp_head and template_redirect rest_output_link_header (priority 11). 3. Do not use rest_authentication_errors to refuse the whole API: it breaks visitor-facing features and answers 401, which confirms the plugins. 4. Verify: /wp-json/ and /wp-json/wp/v2 answer 404 for a visitor and still work for an editor; the kept features work in a private window; no <link rel="https://api.w.org/"> and no Link header on the pages. Tell me exactly which file you added and which namespaces you kept.
Betreff: example.com – bitte die Übersicht der WordPress REST API vor Besuchern verbergen Guten Tag, Eine Website-Prüfung (PageCheck) hat ergeben, dass https://example.com/wp-json/ jedem antwortet und alle Plugins unserer Website auflistet, was Angreifern eine fertige Liste zum Durchgehen gibt. Bitte: 1. Den Index der REST API (/wp-json/) und jeden Namespace, den unsere Seiten nicht aufrufen, vor nicht angemeldeten Besuchern verbergen, sodass sie mit 404 antworten (ein kleines Must-Use-Plugin mit einem rest_endpoints-Filter oder die Einstellung des Sicherheits-Plugins mit Ausnahmen). 2. Die Namespaces behalten, die unsere Formulare, unser Shop oder andere Besucherfunktionen nutzen. 3. Den Link zur REST API aus dem Head der Seiten und den HTTP-Headern entfernen. 4. Prüfen, dass Formulare, der Warenkorb und die Admin-Bildschirme weiterhin funktionieren. Vielen Dank!
Prüfen Sie Ihre Website, um zu sehen, ob sie dieses Problem hat. Website prüfen