WordPress REST API publiski uzskaita izmantotos spraudņus
Vispārīgas instrukcijas. Atveriet šo rakstu no sava PageCheck pārskata, lai redzētu to aizpildītu ar spraudņiem, ko nosauc Jūsu vietnes indekss, un to, kurus no tiem izmanto Jūsu apmeklētāju pārlūki.
Kas tas ir
WordPress REST API ļauj skriptiem lasīt un mainīt vietni caur adresēm zem /wp-json/: to izmanto bloku redaktors, lietotnes un daudzi spraudņi. Tā indekss uzskaita katru "vārdtelpu", ko vietne reģistrē, — adrešu grupu —, un pašam WordPress pieder tikai dažas no tām. Katra cita vārdtelpa pieder kādam spraudnim.
Kas ir nepareizi
Indekss atbild ikvienam, kas to pieprasa, un tā vārdtelpas nosauc vietnes spraudņus. Ar šo sarakstu uzbrucējam nav jāmin: tālāk katra spraudņa versija tiek nolasīta no tā paša failiem un salīdzināta ar publiskajiem zināmo drošības nepilnību sarakstiem. Pati lapa atklāj tikai tos spraudņus, kas tajā ielādē failus; indekss nosauc arī tos, kas to nedara, — SEO, formu, rezerves kopiju, drošības un administrēšanas spraudņus.
Kā labot
API paliek; tikai tā karte un daļas, ko apmeklētāji nekad neizsauc, tiek paslēptas no visiem, kas nav pieteikušies kā vietnes darbinieki. Paslēptajām adresēm jāatbild ar "nav atrasts" (404), nevis "nav autorizēts" (401): 401 joprojām apstiprina, ka spraudnis pastāv.
1. Noskaidrojiet, kuras vārdtelpas izsauc Jūsu lapas. Atveriet vietni privātā pārlūka logā, atveriet pārlūka izstrādātāja rīkus (F12) → Network, filtrējiet pēc wp-json un lietojiet vietni kā apmeklētājs: nosūtiet formu, ielieciet kaut ko grozā, atveriet norēķināšanos, meklējiet. Katrs uzskaitītais pieprasījums nosauc vārdtelpu, kas jāsaglabā.
Biežāk sastopamās:
- Contact Form 7 savas formas iesniedz caur REST API.
- WooCommerce bloku grozs, norēķināšanās un mini grozs lasa Store API (wc/store).
- Skatījumu skaitītāji, piemēram, WP Statistics un WordPress Popular Posts, caur to reģistrē apmeklējumus.
- Kopienas, ziedojumu un piekrišanas spraudņi (BuddyPress, GiveWP, Complianz) to izmanto lapās.
2. Paslēpiet pārējo no apmeklētājiem.
Saglabājiet to kā wp-content/mu-plugins/hide-rest-map.php (mape, iespējams, būs jāizveido; faili tajā vienmēr ir aktīvi). Ierakstiet sarakstā vārdtelpas no 1. soļa — katra tiek saglabāta ar visu, kas atrodas zem tās.
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 );
Ikviens, kas var rediģēt saturu, patur visu API, tāpēc bloku redaktors, WooCommerce un citu spraudņu administrēšanas ekrāni un Vietnes veselība darbojas kā līdz šim. Drošības spraudņi to pašu piedāvā kā iestatījumu ("Atspējot REST API apmeklētājiem" vai līdzīgi); pārliecinieties, ka tas pieņem izņēmumu sarakstu un atbild ar 404, nevis 401.
Nav ieteicams: izplatītais koda fragments, kas apmeklētājiem liedz visu API caur rest_authentication_errors. Tas sabojā formas un bloku grozu un uz katru adresi joprojām atbild ar 401, kas apstiprina, ka katrs spraudnis pastāv.
3. Pārbaudiet.
Atveriet https://example.com/wp-json/ privātā logā: tam jāatbild ar "nav atrasts" (404, rest_no_route). Tad nosūtiet formu un lietojiet grozu vai ko citu, ko dara Jūsu lapas, un palaidiet šo pārbaudi vēlreiz.
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.
Tēma: example.com – lūdzu paslēpt WordPress REST API karti no apmeklētājiem Labdien! Vietnes pārbaude (PageCheck) atklāja, ka https://example.com/wp-json/ atbild ikvienam un uzskaita visus mūsu vietnes spraudņus, kas uzbrucējiem dod gatavu sarakstu, ko izmēģināt pēc kārtas. Lūdzu: 1. Paslēpt REST API indeksu (/wp-json/) un katru vārdtelpu, ko mūsu lapas neizsauc, no apmeklētājiem, kas nav pieteikušies, lai tās atbild ar 404 (mazs must-use spraudnis ar rest_endpoints filtru vai drošības spraudņa iestatījums ar izņēmumiem). 2. Saglabāt vārdtelpas, ko izmanto mūsu formas, veikals vai citas apmeklētājiem paredzētas funkcijas. 3. Izņemt REST API saiti no lapu head sadaļas un HTTP galvenēm. 4. Pārbaudīt, ka formas, grozs un administrēšanas ekrāni joprojām darbojas. Paldies!
Pārbaudiet savu vietni, lai uzzinātu, vai tai ir šī problēma. Pārbaudīt vietni