1 16/10/2026 10 min

Il login di WordPress va difeso a più strati, non con un solo plugin

Se il login di WordPress è esposto su Internet, devi considerarlo un bersaglio continuo: tentativi automatizzati, password reuse, bot che provano credenziali rubate, richieste distribuite da reti diverse e, in alcuni casi, abuso di endpoint secondari come XML-RPC. La difesa efficace non è “installare un plugin e basta”, ma combinare controllo dell’esposizione, hardening dell’accesso, limiti di tentativi, MFA, protezioni sul web server e osservabilità minima.

Qui sotto trovi 10 misure concrete, ordinate per impatto operativo. Non tutte servono in ogni scenario, ma quasi tutte sono compatibili tra loro. L’idea è semplice: ridurre la superficie d’attacco, alzare il costo dell’attacco e mantenere un percorso di recupero se qualcosa si rompe.

1. Metti un limite ai tentativi di accesso

Il primo filtro contro brute force e password spraying è il rate limiting sul login. In WordPress puoi farlo con un plugin affidabile, ma se hai controllo su reverse proxy o web server è meglio applicarlo il più vicino possibile al bordo. Un limite ben impostato deve bloccare chi ripete troppe richieste in poco tempo, senza penalizzare un utente reale che sbaglia una o due volte.

Se usi Nginx, puoi applicare una limitazione per IP sul path di login. Esempio minimale:

limit_req_zone $binary_remote_addr zone=login_zone:10m rate=5r/m; location = /wp-login.php { limit_req zone=login_zone burst=3 nodelay; include fastcgi_params; fastcgi_pass php-fpm;
}

Con Apache puoi ottenere un effetto simile tramite mod_security, mod_evasive o un proxy davanti. Se non vuoi toccare il web server, un plugin come Limit Login Attempts Reloaded o un equivalente ben mantenuto è una soluzione accettabile, purché logghi gli eventi e permetta whitelist amministrative.

Verifica utile: dopo l’applicazione, controlla che i tentativi ripetuti producano 429, 403 o un blocco temporaneo, e che il login legittimo resti fluido. Se il sito è dietro CDN o proxy, assicurati che il rate limiting usi l’IP reale e non quello del proxy.

2. Abilita l’autenticazione a più fattori per gli account amministrativi

La MFA è una delle poche misure che riduce davvero il rischio anche quando la password viene compromessa. Per WordPress, va attivata almeno sugli utenti con privilegi elevati: amministratori, editor con accesso ai plugin, account di manutenzione e account usati da terze parti.

Preferisci TOTP o app di autenticazione rispetto a SMS, che è più debole contro SIM swap e intercettazioni operative. Se gestisci più siti, conviene usare un plugin che supporti policy per ruolo, enforcement graduale e recovery codes. In un ambiente con più amministratori, la mancanza di MFA su un solo account basta a vanificare il resto del lavoro.

Controllo pratico: verifica che l’accesso all’area admin richieda il secondo fattore anche dopo il cambio password e anche su sessioni nuove. Tieni un canale di recupero documentato, perché il problema tipico non è “l’attaccante entra”, ma “l’operatore si blocca fuori”.

3. Sostituisci le password deboli con una policy vera

Molti compromessi del login non dipendono da exploit, ma da password riutilizzate o troppo prevedibili. La policy utile non è “cambia password ogni 30 giorni” in modo cieco; è piuttosto: password lunghe, uniche, archiviate in un password manager, e blocco delle credenziali note nei data breach se hai un controllo centralizzato.

Per gli account WordPress, imposta almeno 14–16 caratteri se l’utente li gestisce manualmente, oppure passphrase più lunghe se il team usa un gestore di password. Se il sito è multi-autore, disabilita la creazione libera di account admin e assegna il minimo privilegio necessario. Un editor non deve diventare amministratore solo per comodità operativa.

Se vuoi ridurre il rischio sistemico, aggiungi controlli su password compromesse nel flusso di registrazione o reset. Non serve inventarsi un sistema complesso: basta integrare un servizio affidabile o un plugin che verifichi le password contro liste di credenziali esposte, sempre con attenzione al trattamento dei dati e ai log.

4. Proteggi `wp-login.php` senza rompere gli utenti legittimi

Bloccare del tutto `wp-login.php` con restrizioni aggressive spesso crea più danni che benefici, soprattutto se gli amministratori lavorano da reti diverse o in mobilità. Una strategia più pulita è aggiungere un controllo accessorio: allowlist IP per ambienti molto chiusi, autenticazione HTTP sul solo pannello, oppure un path di accesso meno esposto ma documentato.

Se il tuo scenario è un sito aziendale con pochi operatori, puoi limitare l’accesso al login da specifiche reti. Esempio per Nginx con allowlist:

location = /wp-login.php { allow 203.0.113.10; allow 198.51.100.0/24; deny all; include fastcgi_params; fastcgi_pass php-fpm;
}

Questo approccio ha blast radius chiaro: se sbagli una rete autorizzata, gli utenti restano fuori. Il rollback deve essere immediato e documentato, con backup della configurazione e test da una rete esterna prima del deploy definitivo. In ambienti pubblici, meglio non usare questa misura come unica barriera.

5. Riduci o disabilita XML-RPC se non ti serve

XML-RPC è ancora una superficie d’attacco utile agli aggressori perché consente tentativi multipli e automazione in un singolo endpoint. Se non ti serve per app mobile, integrazioni legacy o pubblicazione remota, va disabilitato o almeno filtrato. In molti casi è una delle prime cose da chiudere quando il login subisce attacchi ripetuti.

Su Apache, puoi bloccarlo con una regola dedicata; su Nginx, con una location specifica. Esempio concettuale lato applicazione: se il plugin o il tema non usano XML-RPC, non lasciare l’endpoint aperto per inerzia. La verifica è semplice: una richiesta a `xmlrpc.php` deve restituire 403 o 404, non una risposta operativa.

Attenzione al caso d’uso: se hai Jetpack, app mobili o flussi editoriali esterni, prima fai un inventario delle dipendenze. Qui il rollback è banale, ma il blast radius può essere alto se blocchi un’integrazione ancora necessaria.

6. Nascondi il login con un controllo aggiuntivo, non con l’illusione della sicurezza

Rinominare il percorso di login o aggiungere un passaggio preliminare può ridurre il rumore dei bot, ma non va confuso con una protezione primaria. Se usi un plugin che cambia l’URL di accesso, il vantaggio è soprattutto tattico: abbassi il volume di tentativi automatici sui path standard. L’errore classico è considerarlo un segreto; non lo è.

Questa misura funziona bene solo se è accompagnata da MFA e rate limiting. Altrimenti basta una scansione più accurata per ritrovare il punto d’ingresso. Se la implementi, conserva documentazione interna chiara e un accesso di emergenza, perché il rischio operativo più comune è bloccare l’amministratore durante un cambio hosting o dopo una migrazione.

7. Metti un WAF davanti al login e alle API sensibili

Un Web Application Firewall non sostituisce la sicurezza del login, ma aggiunge una barriera utile contro pattern noti: user agent anomali, richieste ripetute, payload sospetti, frequenze innaturali e reputazione IP negativa. Se il sito è dietro Cloudflare, Fastly, Sucuri o un altro edge, puoi spesso attivare regole specifiche per `wp-login.php`, `xmlrpc.php` e percorsi di amministrazione.

Il punto da non sbagliare è la qualità delle regole. Una regola troppo aggressiva crea falsi positivi e blocca utenti reali; una troppo debole non serve a nulla. Parti da osservazione e log: guarda quali paesi, ASN, user agent e frequenze generano rumore, poi stringi il filtro. È meglio una regola semplice e comprensibile che un set opaco impossibile da mantenere.

Se hai un WAF gestito, controlla sempre i log di blocco e la possibilità di eccezioni per IP affidabili. Se invece usi un modulo locale come ModSecurity, versiona le regole e testa in modalità detection prima di passare al blocco.

8. Limita l’esposizione degli account e dei privilegi

Molti attacchi al login diventano gravi perché l’account compromesso ha troppi privilegi. Non assegnare il ruolo di amministratore a chi deve solo pubblicare contenuti. Evita account condivisi, perché rendono impossibile distinguere responsabilità, revoca e audit. Se devi lavorare con freelance o agenzie, crea account nominativi con scadenza e privilegi minimi.

Una buona prassi è controllare periodicamente gli utenti con privilegio elevato. In WordPress puoi farlo dal pannello Utenti, ma su siti grandi conviene anche esportare e revisionare l’elenco. L’obiettivo non è solo la sicurezza del login, ma la riduzione del danno nel caso in cui il login venga comunque violato.

Se usi plugin che aggiungono ruoli personalizzati, verifica che non abbiano permessi eccessivi come installazione plugin, modifica tema o gestione utenti. Sono privilegi che non dovrebbero finire nelle mani di chi pubblica soltanto contenuti editoriali.

9. Metti log e allarmi dove servono davvero

Difendere il login senza guardare i log significa accorgersi del problema quando è già diventato incidente. Ti servono almeno tre livelli di visibilità: tentativi falliti, blocchi applicati, e accessi amministrativi riusciti. Se il tuo stack lo consente, manda gli eventi a un sistema centralizzato o almeno conserva i log del web server e di WordPress con retention sufficiente.

Per un controllo rapido, cerca pattern come troppe richieste su `wp-login.php`, errori ripetuti di autenticazione, accessi da paesi inattesi o cambi improvvisi di user agent. Su Linux, i punti di partenza sono spesso i log del web server e del PHP-FPM; su WordPress, i plugin di audit possono aiutare, ma non devono sostituire i log infrastrutturali.

Un esempio di verifica utile è correlare i picchi di 401/403/429 con il traffico in ingresso. Se il volume sale ma i login riusciti restano stabili, stai contenendo bene. Se invece aumentano i successi sospetti o gli account admin si collegano da IP insoliti, il problema è già oltre il semplice brute force.

10. Prepara il recupero prima che serva

Ogni misura di sicurezza sul login può bloccare anche gli operatori. Per questo serve un piano di recupero minimo: accesso da console o pannello hosting, backup dei file di configurazione, account amministrativo di emergenza con MFA, e procedura documentata per disattivare temporaneamente il blocco se un falso positivo impedisce il lavoro.

Se gestisci il sito su VPS o server dedicato, conserva una copia del plugin di sicurezza e una nota con i percorsi rilevanti. Se lavori su hosting condiviso o pannello, verifica dove si disattivano le regole: file manager, plugin, regole del firewall del pannello, o supporto del provider. La sicurezza che non sai recuperare è fragile, perché alla prima emergenza viene rimossa in fretta e male.

Qui il principio è operativo: ogni controllo aggiunto deve avere un rollback semplice. Se una regola blocca il login, devi sapere se il ripristino passa da un file `.conf`, da un toggle nel plugin o da una whitelist temporanea. Senza questo, la misura non è pronta per produzione.

Una combinazione realistica per la maggior parte dei siti

Se vuoi una configurazione pratica e sostenibile, la combinazione minima che regge bene è questa: MFA per tutti gli admin, rate limiting sul login, password forti e uniche, XML-RPC chiuso se non serve, ruoli minimizzati, e log degli accessi amministrativi. Se il sito è più esposto, aggiungi WAF e controlli di bordo sul reverse proxy.

Per un sito editoriale medio, questa architettura riduce molto il rumore dei bot e rende gli attacchi automatizzati poco convenienti. Per un e-commerce o un portale con dati sensibili, è solo il punto di partenza: lì vanno aggiunti monitoraggio, hardening del server, patching rapido, protezione del backend e revisione periodica degli utenti con privilegi elevati.

Checklist operativa da applicare subito

  1. Verifica se `wp-login.php` e `xmlrpc.php` sono davvero esposti da Internet.
  2. Attiva MFA sugli account amministrativi e conserva i recovery codes in modo sicuro.
  3. Imposta rate limiting o blocco temporaneo sui tentativi falliti.
  4. Rivedi gli utenti con ruolo elevato e rimuovi gli account inutilizzati.
  5. Controlla i log di accesso e crea un alert minimo su picchi anomali.
  6. Se usi un WAF o un proxy, valida che veda l’IP reale del client.
  7. Documenta il rollback: plugin da disattivare, regole da rimuovere, file da ripristinare.

In pratica, la protezione del login di WordPress funziona quando smetti di trattarla come una singola impostazione e la consideri per quello che è: un punto d’ingresso critico, da difendere con più livelli e con un recupero già previsto. È la differenza tra “abbiamo messo un plugin” e “abbiamo ridotto il rischio in modo misurabile”.