REST API di WordPress: perché bloccare solo le richieste non autenticate invece di spegnerla del tutto

Informativa sull'affiliazione v3.1
Informativa sull'affiliazione v3.2 (solo mobile)

La REST API di WordPress mostra i nomi utente del tuo sito tramite l'indirizzo wp-json anche ai visitatori non connessi. Disattivarla del tutto può far fallire il salvataggio nell'editor a blocchi, quindi ho raccolto come bloccare solo le richieste non autenticate e verificarlo con la risposta 401.

1️⃣ Che cos'è la REST API di WordPress: l'indirizzo wp-json e cosa fa

La REST API di WordPress è una funzione integrata di WordPress che scambia dati del sito come articoli, pagine e utenti in formato JSON, e risponde sotto /wp-json/ dopo l'indirizzo del sito.

Sotto /wp-json/ gli indirizzi sono divisi per tipo di dato, come [wp/v2/posts], [wp/v2/pages] e [wp/v2/users], e ciascuno di essi si chiama endpoint. Anche l'editor a blocchi invia richieste a questi indirizzi quando salva un articolo.

https://example.com/wp-json/
https://example.com/wp-json/wp/v2/posts
https://example.com/wp-json/wp/v2/pages
https://example.com/wp-json/wp/v2/users

2️⃣ Nomi utente esposti tramite wp-json

  • ↪️ Perché bloccarlo: users 401 · visibile anche nelle pagine dell'autore

L'endpoint [wp/v2/users] restituisce il nome visualizzato e lo slug di ogni utente che ha pubblicato articoli, e di default lo slug contiene esattamente il nome utente di accesso. Anche nell'account amministratore del sito di test, https://testpilotweb.com/, slug e nome utente di accesso coincidevano.

Una volta esposto il nome utente di accesso, a un attaccante basta scoprire la password per entrare, e la schermata di login di WordPress del sito di test ha registrato 2.570 tentativi brute force solo il 7 ottobre 2026.

Anche bloccando questo indirizzo, lo stesso nome utente resta nell'indirizzo della pagina dell'autore (/author/nomeutente/).

3️⃣ Cosa si rompe se la spegni del tutto

  • ↪️ Salvataggio nell'editor a blocchi · MCP con 0 strumenti

Se disattivi del tutto la WP REST API, la prima cosa a fallire è il salvataggio degli articoli nell'editor a blocchi; per questo anche Perfmatters, uno dei plugin di ottimizzazione per WordPress, divide la disattivazione in due livelli: [Disable for Non-Admins] e [Disable When Logged Out]. Nei siti con account di autori o collaboratori, [Disable for Non-Admins] blocca anche il salvataggio degli articoli di quegli account.

Anche su un sito che bloccava solo le richieste non autenticate, collegando un connettore MCP in claude.ai sono comparsi 0 strumenti dopo l'autenticazione. Nel log del server tutte le richieste MCP risultavano 401, e la causa era che Perfmatters bloccava la richiesta prima che MCP controllasse il token.

Valore di [Disable REST API]Indirizzo users per i visitatori non connessiSalvataggio da account non amministratoriAdatto a
Default (Enabled)Nomi utente espostiSalva normalmente—
Disable for Non-Admins401Salvataggio non riuscitoSiti senza account di autori o collaboratori
Disable When Logged Out401Salva normalmenteSiti con account di autori; per connessioni con token come MCP aggiungi un percorso di eccezione

4️⃣ Bloccare solo le richieste non autenticate (Perfmatters)

  • ↪️ Dove impostarlo · verificare la risposta 401

Nell'area di amministrazione di WordPress vai in [Settings] → [Perfmatters] → [General], imposta [Disable REST API] della sezione [Core] su [Disable When Logged Out] e fai clic su [Save Changes].

WordPress Settings → Perfmatters → General(WordPress REST API)
Perfmatters Disable REST API: Disable When Logged Out

Lingue supportate da Perfmatters: inglese (predefinita), coreano, tedesco, francese, italiano, olandese, portoghese (Brasile), russo, ucraino, turco, bulgaro, ungherese, indonesiano, persiano, cinese (semplificato)

Perfmatters settings simulator: General → Core
Simulatore delle impostazioni di Perfmatters · Recensione · guida di Perfmatters

Se apri /wp-json/wp/v2/users in una finestra in incognito senza accesso, torna una risposta 401 con il messaggio [Sorry, you do not have permission to make REST API requests.], mentre l'editor a blocchi continua a salvare normalmente quando hai effettuato l'accesso.

🔌 Stessa richiesta, due risposte GET /wp-json/wp/v2/users
Sito non bloccato
200
Anche i visitatori non connessi possono vedere i nomi utente.
[
  {
    "id": 1,
    "name": "User A",
    "slug": "user_a",
    "link": "https://example.com/author/user_a/"
  }
]
Sito con [Disable When Logged Out]
401
Le richieste senza accesso ricevono una risposta 401 con un messaggio.
{
  "code": "rest_authentication_error",
  "message": "Sorry, you do not have permission to make REST API requests.",
  "data": { "status": 401 }
}
slug Di default lo slug contiene esattamente il nome utente di accesso.
A sinistra ci sono solo quattro campi della risposta (id · name · slug · link), e il nome è un esempio (user_a).


5️⃣ Eccezioni nei percorsi bloccati

  • ↪️ Eccezione per il percorso MCP · differenza rispetto a rimuovere i link della REST API

Se con il blocco attivo devi aprire solo un percorso specifico, aggiungi quel percorso al filtro [perfmatters_rest_api_exceptions] di Perfmatters. Il problema degli 0 strumenti nel connettore MCP di claude.ai è stato risolto creando uno snippet PHP nel menu [Code] di Perfmatters e lasciando come eccezione solo il percorso MCP.

add_filter('perfmatters_rest_api_exceptions', function($exceptions) {
    $exceptions[] = '/mcp/mcp-oauth-server';
    return $exceptions;
});

Anche dopo l'eccezione, è MCP stesso a bloccare le richieste senza token con il messaggio [MCP authentication required.] e una risposta 401, mentre /wp-json/wp/v2/users continua a restituire la risposta 401 di Perfmatters.

🚦 L'ordine che segue una richiesta
Prima dell'eccezione · richiesta MCP
Richiesta inviata dal connettore MCP di claude.ai dopo l'autenticazione, con [Disable When Logged Out] attivo.
Perfmatters
Bloccata con 401
→↓
Controllo del token MCP
Non raggiunto
→↓
Risultato
0 strumenti
Dopo l'eccezione · richiesta MCP
/mcp/mcp-oauth-server è stato aggiunto come percorso alle eccezioni di Perfmatters.
Perfmatters
Passa perché è un percorso di eccezione
→↓
Controllo del token MCP
Controlla MCP stesso
→↓
Risultato
401 senza token
[MCP authentication required.]
Dopo l'eccezione · /wp-json/wp/v2/users
I percorsi non inseriti tra le eccezioni restano bloccati.
Perfmatters
Bloccata con 401
→↓
Risultato
I nomi utente restano nascosti
⚠️ Perfmatters blocca la richiesta prima che MCP controlli il token.

[Remove REST API Links], nella stessa sezione [Core], rimuove solo il link api.w.org dall'intestazione della pagina e dalle intestazioni di risposta; la WP REST API continua comunque a rispondere.

🔢 FAQ & contenuti consigliati

xmlrpc.php è un indirizzo diverso dalla REST API, quindi continua a rispondere anche con la REST API bloccata. Il sito di test ha registrato 734 richieste POST a xmlrpc.php solo l'8 ottobre 2026, e in Perfmatters puoi bloccarlo con [Disable XML-RPC] nella stessa sezione [Core].

WP Rocket tiene gli indirizzi /wp-json/ nell'elenco delle esclusioni dalla cache, quindi le risposte della REST API cambiano appena salvi. Le impostazioni che cambiano l'HTML della pagina, come [Remove REST API Links], si vedono dopo aver svuotato la cache.

No. L'editor a blocchi di WordPress invia richieste alla REST API quando salva gli articoli, e anche i connettori MCP che collegano strumenti di IA come claude.ai usano percorsi sotto /wp-json/.

ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dimostra di essere umano: 5   +   9   =