Impedire l’enumerazione utenti WordPress via REST API
Hai mai notato che il tuo sito WordPress può rivelare gli username degli amministratori o di altri utenti semplicemente tramite una chiamata alla REST API? Se non ti sei ancora posto il problema, sappi che questa è una delle Schwachstelle più sottovalutate e sfruttate per attacchi informatici come brute force, phishing e altre tecniche di social engineering. In questa guida pratica ti spiego in modo diretto come impedire l’enumerazione utenti WordPress via REST API, così potrai proteggere i dati sensibili del tuo sito con la sicurezza di chi risolve problemi ogni giorno sul campo. Seguendo passo passo le soluzioni qui sotto, impedirai a malintenzionati di scoprire gli username semplicemente visitando /wp-json/wp/v2/users o endpoint simili. Alla fine saprai esattamente cosa fare, anche senza particolari competenze tecniche: sarà come avere un esperto G Tech Group sempre a portata di mano.
Perché l’enumerazione utenti tramite REST API è un rischio serio
Prima di passare subito ai rimedi, è fondamentale capire perché la user enumeration su WordPress è diventata una minaccia reale. Con le versioni recenti del CMS, la REST API è abilitata per impostazione predefinita e offre tante funzionalità utili a sviluppatori e plugin. Tuttavia, uno dei suoi endpoint più critici – /wp-json/wp/v2/users – permette a chiunque, anche non autenticato, di ottenere una lista parziale degli account attivi (di solito almeno quelli pubblici come autori e amministratori con post pubblicati). Questo significa che con una semplice URL si possono scoprire username reali, facilitando attacchi brute force mirati.
L’esposizione degli username non è solo un problema teorico: molti bot automatici scandagliano Google e i motori specializzati proprio alla ricerca di siti WordPress che consentono questa enumerazione. Una volta raccolti i nomi utente validi, provano migliaia di password per prenderne il controllo o compromettere la sicurezza dei contenuti. Prevenire tutto questo richiede pochi minuti ma può salvarti da settimane di grattacapi!
Verifica se l’enumerazione utenti è attiva sul tuo sito
Non basta supporre che il problema ci sia o meno: devi testare manualmente se il tuo sito espone gli username tramite REST API. Ecco come fare in pochi passi:
- Accedi al browser: Apri Chrome, Firefox o quello che usi abitualmente.
- Inserisci l’URL: Digita nella barra degli indirizzi:
https://tuosito.it/wp-json/wp/v2/users - Osserva la risposta: Se compare un elenco strutturato (JSON) con i campi “id”, “name”, “slug” o simili, significa che la funzione è attiva e stai vedendo dati reali (tra cui lo username). Se invece ricevi un messaggio di errore tipo “rest_cannot_view”, la tua installazione non consente l’accesso pubblico agli utenti.
- Esegui controlli aggiuntivi: Prova anche endpoint come /wp-json/wp/v2/users/1, cambiando “1” con altri numeri per individuare se si possono recuperare dettagli su specifiche utenze.
Suggerimento importante: Fai questi test anche da una finestra in incognito oppure disconnesso dal tuo profilo admin per verificare ciò che vede realmente un visitatore anonimo.
Sbloccare la sicurezza: disabilitare manualmente l’elenco utenti nella REST API via functions.php
Se vuoi una soluzione leggera senza utilizzare plugin aggiuntivi, puoi inserire alcune righe di codice direttamente nel file functions.php del tema attivo (meglio ancora se child theme). Così potrai bloccare l’enumerazione utenti WordPress via REST API.
- Esegui backup completo:
Prima di toccare file core, scarica una copia del sito o almeno dei file tramite FTP/hosting. - Edita functions.php:
Vai su Dashboard > Aspetto > Editor del Tema > cerca il file functions.php. - Aggiungi queste righe in fondo al file:
(Spiegazione riga per riga subito dopo il codice)
- BLOCCA richiesta all’endpoint /users se non sei loggato:
// Impedisce enumerazione utenti tramite REST API
add_filter('rest_endpoints', function($endpoints){
if (isset($endpoints['/wp/v2/users'])) {
unset($endpoints['/wp/v2/users']);
}
if (isset($endpoints['/wp/v2/users/(?P[\\d]+)'])) {
unset($endpoints['/wp/v2/users/(?P[\\d]+)']);
}
return $endpoints;
});
- Cosa fa ogni riga?
- Add_filter(‘rest_endpoints’,…): Aggancia la funzione ai punti dove WordPress registra gli endpoint della Rest API.
- If isset(…): Cerca gli endpoint sensibili relativi agli utenti.
- Unset(…): Annulla quei percorsi dall’elenco pubblico degli endpoint disponibili.
- Return $endpoints; : Riconsegna tutte le altre rotte tranne quelle appena tolte.
Dopo aver salvato, ripeti il test al punto precedente: dovresti ora ricevere errore o nessun dato tornando su /wp-json/wp/v2/users.
Sicurezza avanzata: proteggere la REST API con plugin specializzati (WP Cerber Security e Disable WP REST API)
L’approccio manuale va bene nei casi semplici ma può essere superato da aggiornamenti futuri o plugin che riattivano la funzionalità. Se vuoi qualcosa di gestibile anche senza mettere mani al codice – magari per delegare facilmente a collaboratori – ti consiglio due plugin robusti testati su decine di installazioni:
- WP Cerber Security: Sicurezza all-in-one che include opzioni precise contro l’enumerazione utenti sia via query string sia via Rest API. Una volta installato da Dashboard > Plugin > Aggiungi nuovo cerca “WP Cerber Security”, installa e attiva.
Vai su Cerber > Rafforzamento e attiva le voci relative a “Blocca enumerazione utenti” oppure “Interrompi richiesta nome utente tramite Rest”.
Questa impostazione blocca le richieste sospette e restituisce errori personalizzati agli accessi non autorizzati.
- Disable WP REST API: Plugin leggerissimo pensato solo per limitare l’accesso alla Rest Api. Dopo averlo installato troverai nelle impostazioni una voce dove consentire solo agli utenti autenticati le chiamate all’API.
Così facendo eviti sia enumerate che scraping massivo da parte di esterni.Tieni presente: Limitando tutta la Rest Api alcuni plugin potrebbero perdere funzionalità (come editor a blocchi Gutenberg). Per questo suggerisco WP Cerber se vuoi granularità maggiore.
- Dopo ogni modifica testa da logout!: Fai logout dall’admin e riprova ad accedere alle rotte sensibili per verificare che la limitazione funzioni davvero anche per visitatori anonimi.

Casi particolari: consentire user enumeration solo ad admin autenticati (controllo avanzato)
A volte potresti voler bloccare completamente l’enumerazione degli utenti solo verso esterni ma mantenere libera questa funzione agli editor autenticati (esempio: se hai app personalizzate che usano la Rest Api). Puoi ottenere questo controllo fine con poche righe aggiuntive in functions.php oppure configurando plugin avanzati.
Esempio pratico con filtro conditional su autenticati:
// Blocca endpoint 'users' solo ai visitatori anonimi
add_filter('rest_endpoints', function($endpoints){
if (!is_user_logged_in()) {
if (isset($endpoints['/wp/v2/users'])) {
unset($endpoints['/wp/v2/users']);
}
if (isset($endpoints['/wp/v2/users/(?P[\\d]+)'])) {
unset($endpoints['/wp/v2/users/(?P[\\d]+)']);
}
}
return $endpoints;
});
default
// Oppure rest_forbidden filter:
ad_filter('rest_authentication_errors', function($result){
n if (!is_user_logged_in() && strpos($_SERVER['REQUEST_URI'], '/wp-json/wp/v2/users') !== false) {
n return new WP_Error('rest_forbidden', 'Accesso negato', array('status' => 403));
n }
n return $result;
n});
default
// In questo modo chi è loggato continua a usare gli endpoint user-related,
nma chiunque altro trova errore 403.
defaultAnche alcuni firewall applicativi offrono regole simili già pronte: verifica nel pannello del tuo hosting se puoi applicarle a livello server senza modificare singoli siti uno a uno!