Apri il log degli accessi di un sito WordPress che è stato online per più di alcuni giorni e cerca wp-login.php. Troverai centinaia, spesso migliaia di righe di indirizzi IP di cui non hai mai sentito parlare, tutti che provano combinazioni comuni di nome utente e password. Il login WordPress è uno degli endpoint più attaccati sul web pubblico, semplicemente perché l'URL è universale. Ogni sito WordPress al mondo serve il form di login su /wp-login.php e /wp-admin. Questo rende banalmente facile per i botnet attaccare su larga scala.
Spostare l'URL di login su qualcosa di personalizzato non risolve il problema sottostante (qualcuno con un vero interesse nel tuo sito specifico troverà comunque il nuovo URL), ma rimuove il sito dai milioni di liste automatizzate che scrapano l'endpoint predefinito e lo bombardano. In pratica, questo fa diminuire il traffico di login del 95% o più, che è una vittoria significativa solo per il carico del server. Questa guida spiega cosa fa effettivamente la modifica, i diversi modi per implementarla e le insidie da evitare.
Cosa fa e non fa cambiare l'URL di login
Vale la pena essere precisi qui, perché l'argomento è rappresentato male in entrambe le direzioni. Alcune guide lo vendono come una difesa completa, altre lo liquidano come teatro di sicurezza. La posizione accurata sta nel mezzo.
Cosa fa bene:
- Ferma i botnet automatizzati che mirano direttamente a
/wp-login.php. La stragrande maggioranza del traffico brute-force sono script stupidi che iterano attraverso liste di parole. Non cercano il nuovo URL perché ciò richiede una vera visita e parsing HTML. - Ti rimuove dalle liste di filtraggio "login WordPress presente" che gli scanner costruiscono per trovare rapidamente i bersagli.
- Riduce drasticamente il carico del server e il rumore dei log. Sui siti trafficati, solo questo è una ragione sufficiente.
- Limita la visibilità involontaria dell'admin. La pagina di login trapela già per la sua semplice esistenza: messaggi di errore, favicon, logo WordPress, la versione del template di login. Nascondere l'URL nasconde tutto questo.
Cosa non fa:
- Fermare un aggressore determinato che prende di mira specificamente il tuo sito. Troveranno il nuovo URL tramite uno di: il redirect di login che avviene dopo il logout, l'email di reset password che si collega al nuovo URL, il percorso del cookie, un link trapelato nel tuo CMS, o semplicemente indovinando slug comuni.
- Sostituire password forti o autenticazione a due fattori. L'URL di login è uno strato davanti all'effettiva autenticazione. La vera difesa è ancora cosa c'è sul form, non dove è il form.
- Proteggere contro vulnerabilità a livello di applicazione. Se un plugin ha un bug di esecuzione di codice remoto, l'URL di login è irrilevante.
L'inquadramento pragmatico: cambiare l'URL di login è una modifica ad alta resa e poco sforzo che affronta una classe specifica di attacchi (brute-forcing automatizzato non mirato). Si abbina bene a password forti, 2FA e un rate limiter, ma non sostituisce nessuno di questi.
Il modo raccomandato: WPS Hide Login (o equivalente)
Per il 95% dei siti, la soluzione più pulita è il plugin gratuito WPS Hide Login. È piccolo (sotto i 100KB), è mantenuto attivamente da anni, ha oltre un milione di installazioni attive e fa esattamente una cosa: cambiare lo slug dell'URL di login. Niente upsell, niente pannello impostazioni stipato di funzionalità irrilevanti.
La configurazione richiede un minuto:
- Installa WPS Hide Login dalla directory dei plugin.
- Attivalo.
- Vai a Impostazioni, WPS Hide Login.
- Inserisci il tuo nuovo slug nel campo "URL di login". Esempi:
mio-login-segreto,backstage,accesso-2347. Evita scelte ovvie comeadmin,secret,login, il tuo nome di dominio con un numero aggiunto, ecc. - Imposta opzionalmente un "URL di reindirizzamento" per le visite al vecchio
/wp-login.php. Il comportamento predefinito restituisce un 404, che è quello che vuoi contro gli scanner. Un reindirizzamento personalizzato alla homepage va anche bene. - Salva.
Da questo punto in poi, https://tuodominio.it/wp-login.php restituisce un 404 per gli estranei, e accedi tramite https://tuodominio.it/mio-login-segreto. Aggiungi immediatamente ai segnalibri il nuovo URL. Il plugin non memorizza lo slug in un posto visibile dall'esterno, quindi se dimentichi l'URL e non hai accesso FTP, hai un problema (anche se c'è un percorso di recupero descritto di seguito).
Alternativa: uno slug personalizzato senza plugin
Se preferisci non aggiungere un altro plugin, puoi implementare lo stesso effetto nel codice. Mettilo in un plugin must-use sotto wp-content/mu-plugins/custom-login-url.php:
<?php
/**
* Plugin Name: Custom Login URL
* Description: Hides /wp-login.php behind a custom slug.
*/
if (!defined('ABSPATH')) {
exit;
}
const CUSTOM_LOGIN_SLUG = 'my-secret-login';
add_action('init', function () {
$requestUri = isset($_SERVER['REQUEST_URI']) ? (string) $_SERVER['REQUEST_URI'] : ';
$path = parse_url($requestUri, PHP_URL_PATH) ?? ';
$path = trim($path, '/');
// Allow access via the custom slug by serving wp-login.php
if ($path === CUSTOM_LOGIN_SLUG) {
require_once ABSPATH . 'wp-login.php';
exit;
}
// Block direct access to the default login URL
if (preg_match('#(^|/)wp-login\.php$#', $path)) {
status_header(404);
nocache_headers();
include get_404_template();
exit;
}
});
// Rewrite the URL in emails and login redirects
add_filter('site_url', function ($url, $path) {
if (str_contains((string) $path, 'wp-login.php')) {
return str_replace('wp-login.php', CUSTOM_LOGIN_SLUG, $url);
}
return $url;
}, 10, 2);
add_filter('wp_redirect', function ($location) {
return str_replace('wp-login.php', CUSTOM_LOGIN_SLUG, $location);
});Il vantaggio di questo approccio è il controllo totale e zero dipendenze da plugin. Lo svantaggio è che devi mantenerlo tu stesso, e i casi limite (multisite, flussi di registrazione personalizzati, alcuni page builder che usano il form di login) hanno bisogno di gestione extra. Per la maggior parte dei siti, WPS Hide Login è davvero la risposta più pratica.
Scegliere un buon slug
Lo slug ha solo bisogno di non essere ovvio, non crittograficamente segreto. Alcune regole pratiche:
- Evita variazioni comuni di "login", "admin" o "wp". Gli scanner che vanno oltre
/wp-login.phpdi solito hanno una lista:/login,/admin,/secure-login,/wp-secret,/backend,/dashboard. Scegli qualcosa che non è in quella lista. - Scegli qualcosa di memorabile per te, non casuale. Uno slug che puoi digitare a memoria va bene.
mio-gatto-tofuè molto meglio dik7Hg2Pperché memorizzi quest'ultimo in un password manager e non dimentichi il primo. - Non usare il dominio o il nome dell'azienda.
example-loginsuexample.comè la prima cosa che un aggressore mirato proverà. - Lettere minuscole, niente caratteri speciali. Gli URL sono tecnicamente case-sensitive, ma gli utenti reali sbagliano costantemente la digitazione delle maiuscole. Uno slug in lettere minuscole previene l'intera classe di ticket "non riesco ad accedere".
Insidie comuni e casi limite
Una manciata di cose si rompe o si comporta inaspettatamente quando sposti l'URL di login. Vale la pena saperlo in anticipo.
- Pagina "Il mio account" di WooCommerce. Il login del cliente su
/mio-account/è un flusso separato e non è influenzato dalla modifica. Stai nascondendo solo il login admin. I clienti WooCommerce accedono normalmente. - Plugin di autenticazione a due fattori. La maggior parte dei principali plugin 2FA (Wordfence, WP 2FA, miniOrange, ecc.) funziona bene con WPS Hide Login. Si agganciano al processo di login a un livello sotto l'URL e non si curano di dove è il form. Testa una volta dopo l'attivazione.
- REST API e XML RPC. Il cambio di URL di login non influisce su
/wp-json/o/xmlrpc.php. Se hai applicazioni che si autenticano contro quegli endpoint, continuano a funzionare come prima. Se non usi attivamente XML RPC, questo è un buon momento per disabilitarlo completamente (guida separata nella nostra knowledge base). - Plugin di caching. Alcune cache di pagina aggressive (LiteSpeed Cache con edge caching, Cloudflare APO) possono memorizzare in cache il nuovo URL di login o, peggio, memorizzare in cache una risposta admin loggata e servirla ai visitatori disconnessi. Visita il nuovo URL in una finestra privata dopo la modifica. Se vedi una vista admin loggata, la cache è rotta; svuotala e aggiungi lo slug alla lista di esclusione della cache.
- Email di reset password. Sia WPS Hide Login sia lo snippet di codice sopra riscrivono automaticamente l'URL di reset password, ma plugin email personalizzati o integrazioni email transazionali a volte codificano
wp-login.phpnei loro template. Invia un reset password di test a te stesso dopo la modifica. - Installazioni in sottocartella e multisite. Entrambe funzionano, ma fai attenzione che lo slug venga aggiunto all'URL base sbagliato. Se WordPress è in
/blog/, il nuovo URL èhttps://tuodominio.it/blog/mio-login-segreto, nonhttps://tuodominio.it/mio-login-segreto.
Recupero: cosa fare se ti escludi
Succede. Imposti lo slug, ti disconnetti, chiudi la scheda, e una settimana dopo non riesci a ricordare se hai usato trattini, underscore o quale fosse la terza parola. Non sei bloccato, ma il percorso di recupero dipende dal metodo usato.
Se hai usato WPS Hide Login: disattiva il plugin tramite SFTP. Rinomina la cartella wp-content/plugins/wps-hide-login in wps-hide-login.disabled, o eliminala completamente. L'URL predefinito /wp-login.php torna immediatamente. Accedi, cerca il tuo slug nelle impostazioni del plugin, poi riattiva il plugin. Oppure in alternativa, guarda direttamente nel database WordPress: lo slug è memorizzato nella tabella wp_options sotto la chiave whl_page.
Se hai usato il codice personalizzato: SFTP in wp-content/mu-plugins/, apri il file, leggi lo slug dalla costante CUSTOM_LOGIN_SLUG. O rinomina temporaneamente il file per disabilitarlo, accedi, poi rimettilo a posto.
In entrambi i casi, scrivi l'URL da qualche parte di durevole non appena lo imposti. Password manager, documentazione del progetto, qualsiasi cosa che sopravviva alla perdita di un segnalibro del browser.
Come verificare che la modifica sia attiva
- Apri
https://tuodominio.it/wp-login.phpin una finestra privata. Risultato atteso: una pagina 404. - Stesso controllo per
https://tuodominio.it/wp-admin/. Dovrebbe anche reindirizzare al 404, non al form di login. - Apri il nuovo URL
https://tuodominio.it/mio-login-segreto. Dovrebbe mostrare il form di login WordPress standard. - Accedi normalmente, disconnetti, clicca sul link "Disconnetti". Il reindirizzamento dovrebbe atterrare sul nuovo URL, non su
/wp-login.php. - Attiva un reset password per te stesso. Il link nell'email dovrebbe puntare al nuovo URL.
- Esegui una nuova scansione InspectWP. I controlli relativi all'URL di login dovrebbero riflettere il nuovo stato.
Una volta verificato, l'unica manutenzione continua è assicurarsi che il plugin (o il tuo codice personalizzato) continui a funzionare con gli aggiornamenti del core di WordPress, cosa che dovrebbe. Se un aggiornamento maggiore mai cambia come funziona internamente il flusso di login, WPS Hide Login è uno dei primi plugin a rilasciare una patch, di solito entro giorni.
L'intera modifica è una mezz'ora di lavoro per una riduzione permanente della superficie di attacco e una visibile diminuzione del carico del server. Non c'è una buona ragione per lasciare il login WordPress nella sua posizione predefinita su un sito di produzione.