WP Rescue

Impedire l’enumerazione utenti WordPress via REST API

prevenire enumerazione utenti wordpress via rest api

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 vulnérabilité 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:

  1. Accedi al browser: Apri Chrome, Firefox o quello che usi abitualmente.
  2. Inserisci l’URL: Digita nella barra degli indirizzi:
    https://tuosito.it/wp-json/wp/v2/users
  3. 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.
  4. 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.

  1. Esegui backup completo:
    Prima di toccare file core, scarica una copia del sito o almeno dei file tramite FTP/hosting.
  2. Edita functions.php:
    Vai su Dashboard > Aspetto > Editor del Tema > cerca il file functions.php.
  3. Aggiungi queste righe in fondo al file:

(Spiegazione riga per riga subito dopo il codice)

// 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;
});

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:

  1. 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.
Mani che digitano codice su un laptop con editor di testo aperto in un ambiente di lavoro ordinato

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.
default

Anche 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!

Gianluca Gentile

Je m'appelle Gianluca Gentile, diplômé en 1991. J'ai toujours été animé d'une passion sans bornes pour les technologies de l'information. L'informatique et le web sont devenus mes compagnons inséparables. En 2012, j'ai donc décidé de faire de mes aptitudes et de mes compétences un "métier". Grâce à mon expérience et à mon professionnalisme, je m'occupe de la restructuration et de la construction de l'image d'une entreprise à partir de zéro. Mes tâches consistent à gérer toutes les étapes du processus créatif, à prendre soin de tous les aspects des campagnes publicitaires dans les différents médias.

Quitter la version mobile