{"id":24189,"date":"2025-12-10T10:06:00","date_gmt":"2025-12-10T10:06:00","guid":{"rendered":"https:\/\/soccorsowp.it\/blog\/impedire-lenumerazione-utenti-wordpress-via-rest-api\/"},"modified":"2025-12-10T10:06:00","modified_gmt":"2025-12-10T10:06:00","slug":"impedire-lenumerazione-utenti-wordpress-via-rest-api","status":"publish","type":"post","link":"https:\/\/soccorsowp.it\/blog\/impedire-lenumerazione-utenti-wordpress-via-rest-api\/","title":{"rendered":"Impedire l&#8217;enumerazione utenti WordPress via REST API"},"content":{"rendered":"<h1>Impedire l&#8217;enumerazione utenti WordPress via REST API<\/h1>\n<p>Hai mai notato che il tuo sito WordPress pu\u00f2 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 \u00e8 una delle <strong>vulnerabilit\u00e0<\/strong> pi\u00f9 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 <strong>impedire l&#8217;enumerazione utenti WordPress via REST API<\/strong>, cos\u00ec 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\u00e0 come avere un esperto G Tech Group sempre a portata di mano.<\/p>\n<h2>Perch\u00e9 l&#8217;enumerazione utenti tramite REST API \u00e8 un rischio serio<\/h2>\n<p>Prima di passare subito ai rimedi, \u00e8 fondamentale capire perch\u00e9 la <strong>user enumeration su WordPress<\/strong> \u00e8 diventata una minaccia reale. Con le versioni recenti del CMS, la REST API \u00e8 abilitata per impostazione predefinita e offre tante funzionalit\u00e0 utili a sviluppatori e plugin. Tuttavia, uno dei suoi endpoint pi\u00f9 critici \u2013 <strong>\/wp-json\/wp\/v2\/users<\/strong> \u2013 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 <strong>scoprire username reali<\/strong>, facilitando attacchi brute force mirati.<\/p>\n<p>L&#8217;esposizione degli username non \u00e8 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\u00f2 salvarti da settimane di grattacapi!<\/p>\n<h2>Verifica se l&#8217;enumerazione utenti \u00e8 attiva sul tuo sito<\/h2>\n<p>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:<\/p>\n<ol>\n<li><strong>Accedi al browser:<\/strong> Apri Chrome, Firefox o quello che usi abitualmente.<\/li>\n<li><strong>Inserisci l&#8217;URL:<\/strong> Digita nella barra degli indirizzi:<br \/> <em>https:\/\/tuosito.it\/wp-json\/wp\/v2\/users<\/em><\/li>\n<li><strong>Osserva la risposta:<\/strong> Se compare un elenco strutturato (JSON) con i campi &#8220;id&#8221;, &#8220;name&#8221;, &#8220;slug&#8221; o simili, significa che la funzione \u00e8 attiva e stai vedendo dati reali (tra cui lo <strong>username<\/strong>). Se invece ricevi un messaggio di errore tipo &#8220;rest_cannot_view&#8221;, la tua installazione non consente l&#8217;accesso pubblico agli utenti.<\/li>\n<li><strong>Esegui controlli aggiuntivi:<\/strong> Prova anche endpoint come <em>\/wp-json\/wp\/v2\/users\/1<\/em>, cambiando &#8220;1&#8221; con altri numeri per individuare se si possono recuperare dettagli su specifiche utenze.<\/li>\n<\/ol>\n<p><em>Suggerimento importante:<\/em> Fai questi test anche da una finestra in incognito oppure disconnesso dal tuo profilo admin per verificare ci\u00f2 che vede realmente un visitatore anonimo.<\/p>\n<h2>Sbloccare la sicurezza: disabilitare manualmente l&#8217;elenco utenti nella REST API via functions.php<\/h2>\n<p>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\u00ec potrai bloccare l&#8217;<strong>enumerazione utenti WordPress via REST API<\/strong>.<\/p>\n<ol>\n<li><strong>Esegui backup completo:<\/strong><br \/> Prima di toccare file core, scarica una copia del sito o almeno dei file tramite FTP\/hosting.<\/li>\n<li><strong>Edita functions.php:<\/strong><br \/> Vai su Dashboard > Aspetto > Editor del Tema > cerca il file <strong>functions.php<\/strong>.<\/li>\n<li><strong>Aggiungi queste righe in fondo al file:<\/strong><\/li>\n<\/ol>\n<p><em>(Spiegazione riga per riga subito dopo il codice)<\/em><\/p>\n<ul>\n<li>BLOCCA richiesta all\u2019endpoint \/users se non sei loggato:<\/li>\n<\/ul>\n<pre>\/\/ Impedisce enumerazione utenti tramite REST API\nadd_filter('rest_endpoints', function($endpoints){\n    if (isset($endpoints['\/wp\/v2\/users'])) {\n        unset($endpoints['\/wp\/v2\/users']);\n    }\n    if (isset($endpoints['\/wp\/v2\/users\/(?P<id>[\\\\d]+)'])) {\n        unset($endpoints['\/wp\/v2\/users\/(?P<id>[\\\\d]+)']);\n    }\n    return $endpoints;\n});\n<\/pre>\n<ul>\n<li><b>Cosa fa ogni riga?<\/b><\/li>\n<li><b>Add_filter(&#8216;rest_endpoints&#8217;,&#8230;): <\/b>Aggancia la funzione ai punti dove WordPress registra gli endpoint della Rest API.<\/li>\n<li><b>If isset(&#8230;): <\/b>Cerca gli endpoint sensibili relativi agli utenti.<\/li>\n<li><b>Unset(&#8230;): <\/b>Annulla quei percorsi dall&#8217;elenco pubblico degli endpoint disponibili.<\/li>\n<li><b>Return $endpoints; <\/b>: Riconsegna tutte le altre rotte tranne quelle appena tolte.<\/li>\n<\/ul>\n<p>Dopo aver salvato, ripeti il test al punto precedente: dovresti ora ricevere errore o nessun dato tornando su <em>\/wp-json\/wp\/v2\/users<\/em>.<\/p>\n<h2>Sicurezza avanzata: proteggere la REST API con plugin specializzati (WP Cerber Security e Disable WP REST API)<\/h2>\n<p>L\u2019approccio manuale va bene nei casi semplici ma pu\u00f2 essere superato da aggiornamenti futuri o plugin che riattivano la funzionalit\u00e0. Se vuoi qualcosa di gestibile anche senza mettere mani al codice \u2013 magari per delegare facilmente a collaboratori \u2013 ti consiglio due plugin robusti testati su decine di installazioni:<\/p>\n<ul>\n<li><b>WP Cerber Security:<\/b> Sicurezza all-in-one che include opzioni precise contro l\u2019enumerazione utenti sia via query string sia via Rest API. Una volta installato da Dashboard > Plugin > Aggiungi nuovo cerca \u201cWP Cerber Security\u201d, installa e attiva.\n<p>Vai su Cerber > Rafforzamento e attiva le voci relative a &#8220;Blocca enumerazione utenti&#8221; oppure &#8220;Interrompi richiesta nome utente tramite Rest&#8221;.<br \/>Questa impostazione blocca le richieste sospette e restituisce errori personalizzati agli accessi non autorizzati.<\/li>\n<\/ul>\n<ul>\n<li><b>Disable WP REST API:<\/b> Plugin leggerissimo pensato solo per limitare l\u2019accesso alla Rest Api. Dopo averlo installato troverai nelle impostazioni una voce dove consentire solo agli utenti autenticati le chiamate all\u2019API.<br \/>Cos\u00ec facendo eviti sia enumerate che scraping massivo da parte di esterni.\n<p><em>Tieni presente:<\/em> Limitando tutta la Rest Api alcuni plugin potrebbero perdere funzionalit\u00e0 (come editor a blocchi Gutenberg). Per questo suggerisco WP Cerber se vuoi granularit\u00e0 maggiore.<\/li>\n<\/ul>\n<ol start=\"3\">\n<li><b>Dopo ogni modifica testa da logout!<\/b>: Fai logout dall\u2019admin e riprova ad accedere alle rotte sensibili per verificare che la limitazione funzioni davvero anche per visitatori anonimi.<\/li>\n<\/ol>\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1792\" height=\"1024\" src=\"https:\/\/soccorsowp.it\/blog\/wp-content\/uploads\/2025\/12\/img-qvilcvossqdsq1of0y1bpfu5.png\" alt=\"Mani che digitano codice su un laptop con editor di testo aperto in un ambiente di lavoro ordinato\" class=\"wp-image-24186\" srcset=\"https:\/\/soccorsowp.it\/blog\/wp-content\/uploads\/2025\/12\/img-qvilcvossqdsq1of0y1bpfu5.png 1792w, https:\/\/soccorsowp.it\/blog\/wp-content\/uploads\/2025\/12\/img-qvilcvossqdsq1of0y1bpfu5-300x171.png 300w, https:\/\/soccorsowp.it\/blog\/wp-content\/uploads\/2025\/12\/img-qvilcvossqdsq1of0y1bpfu5-1024x585.png 1024w, https:\/\/soccorsowp.it\/blog\/wp-content\/uploads\/2025\/12\/img-qvilcvossqdsq1of0y1bpfu5-768x439.png 768w, https:\/\/soccorsowp.it\/blog\/wp-content\/uploads\/2025\/12\/img-qvilcvossqdsq1of0y1bpfu5-1536x878.png 1536w, https:\/\/soccorsowp.it\/blog\/wp-content\/uploads\/2025\/12\/img-qvilcvossqdsq1of0y1bpfu5-18x10.png 18w, https:\/\/soccorsowp.it\/blog\/wp-content\/uploads\/2025\/12\/img-qvilcvossqdsq1of0y1bpfu5-600x343.png 600w\" sizes=\"auto, (max-width: 1792px) 100vw, 1792px\" \/><\/figure>\n<h2>Casi particolari: consentire user enumeration solo ad admin autenticati (controllo avanzato)<\/h2>\n<p>A volte potresti voler bloccare completamente l\u2019enumerazione 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.<\/p>\n<h3>Esempio pratico con filtro conditional su autenticati:<\/h3>\n<pre>\/\/ Blocca endpoint 'users' solo ai visitatori anonimi<br \/>\nadd_filter('rest_endpoints', function($endpoints){<br \/>\n    if (!is_user_logged_in()) {<br \/>\n        if (isset($endpoints['\/wp\/v2\/users'])) {<br \/>\n            unset($endpoints['\/wp\/v2\/users']);<br \/>\n        }<br \/>\n        if (isset($endpoints['\/wp\/v2\/users\/(?P<id>[\\\\d]+)'])) {<br \/>\n            unset($endpoints['\/wp\/v2\/users\/(?P<id>[\\\\d]+)']);<br \/>\n        }<br \/>\n    }<br \/>\n    return $endpoints;<br \/>\n});<br \/>\ndefault<br \/>\n\/\/ Oppure rest_forbidden filter:<br \/>\nad_filter('rest_authentication_errors', function($result){<br \/>\nn    if (!is_user_logged_in() && strpos($_SERVER['REQUEST_URI'], '\/wp-json\/wp\/v2\/users') !== false) {<br \/>\nn        return new WP_Error('rest_forbidden', 'Accesso negato', array('status' => 403));<br \/>\nn    }<br \/>\nn    return $result;<br \/>\nn});<br \/>\ndefault<br \/>\n\/\/ In questo modo chi \u00e8 loggato continua a usare gli endpoint user-related,<br \/>\nnma chiunque altro trova errore 403.<br \/>\ndefault<\/p>\n<p>Anche alcuni firewall applicativi offrono regole simili gi\u00e0 pronte: verifica nel pannello del tuo hosting se puoi applicarle a livello server senza modificare singoli siti uno a uno!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Impedire l&#8217;enumerazione utenti WordPress via REST API Hai mai notato che il tuo sito WordPress pu\u00f2 rivelare gli username degli amministratori o di altri utenti&#8230;<\/p>\n","protected":false},"author":1,"featured_media":25598,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"Impedire l'enumerazione utenti WordPress via REST API","_seopress_titles_desc":"Scopri come impedire l'enumerazione utenti WordPress tramite REST API per migliorare la sicurezza del tuo sito. Segui la guida passo passo ora!","_seopress_robots_index":"","footnotes":""},"categories":[1700],"tags":[487,1492,1493,1542,1530],"class_list":{"0":"post-24189","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-sicurezza-wordpress","8":"tag-api","9":"tag-attacchi-automatizzati","10":"tag-attacchi-brute-force","11":"tag-attacchi-brute-force-wordpress","12":"tag-autenticazione-a-due-fattori-wordpress"},"_links":{"self":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts\/24189","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/comments?post=24189"}],"version-history":[{"count":0,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/posts\/24189\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/media\/25598"}],"wp:attachment":[{"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/media?parent=24189"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/categories?post=24189"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/soccorsowp.it\/blog\/wp-json\/wp\/v2\/tags?post=24189"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}