Skip to Content

2FA Auth Pilot

2FA Auth Pilot aggiunge un livello di sicurezza al login di WordPress chiedendo un secondo passaggio di verifica dopo username e password. Il plugin implementa il Time-based One-Time Password (TOTP) (RFC 6238), lo standard del settore, e funziona con qualsiasi app authenticator compatibile: Google Authenticator, Microsoft Authenticator, Authy, 1Password e Duo.

Anche se una password viene rubata, intercettata via phishing o riusata altrove, un attaccante non può completare il login senza il codice temporaneo generato sul dispositivo dell’utente. L’amministratore può rendere la 2FA obbligatoria per ruolo, definire un periodo di tolleranza entro cui completare l’enrolment e mettere in whitelist intervalli IP fidati esentati dal secondo fattore.

Schermata di challenge 2FA al login
Schermata di challenge 2FA al login

Punti di forza

  • Autenticazione TOTP compatibile con qualunque app RFC 6238 (Google Authenticator, Microsoft Authenticator, Authy, 1Password, Duo, FreeOTP, …).
  • Fallback OTP via email che invia un codice di verifica a 6 cifre quando l’app authenticator non è disponibile.
  • Codici di recupero: da 5 a 20 codici monouso generati durante l’enrolment per gli accessi d’emergenza.
  • Enforcement per ruolo: ogni ruolo WordPress può essere impostato su Richiesto, Opzionale o Disabilitato.
  • Periodo di tolleranza fino a 90 giorni per i ruoli obbligati, così gli utenti esistenti non restano fuori nel momento in cui attivi la 2FA.
  • Whitelist IP con notazione IPv4 e CIDR per saltare la 2FA da reti fidate (ufficio, VPN, monitoring).
  • Memoria dispositivi fidati: l’opzione Ricorda questo dispositivo può sopprimere il prompt 2FA fino a 365 giorni su un browser specifico.
  • Protezione API: XML-RPC e la REST API di WordPress possono essere protette da controlli 2FA-aware.
  • Enrolment tramite QR code con fallback a chiave manuale per gli ambienti in cui il QR non è scansionabile.
  • Finestra temporale configurabile (1–4 intervalli) per compensare il drift di orologio tra server e dispositivo dell’utente.
  • Disinstallazione pulita opzionale che rimuove tutti i dati del plugin alla cancellazione.

Requisiti

  • WordPress 6.0 o superiore.
  • PHP 7.4 o superiore (consigliato PHP 8.x).
  • Un orologio server accurato. Il TOTP si basa sulla sincronizzazione temporale; un drift di oltre 90 secondi farà rifiutare codici altrimenti validi.
  • Un’app authenticator installata sullo smartphone, tablet o password manager di ciascun utente.
  • Per il fallback OTP via email serve un sistema di invio mail in uscita funzionante (il plugin companion Mail Pilot o una qualsiasi integrazione SMTP vanno bene).

Installazione

  1. Scarica il file ZIP del plugin.
  2. Nell’admin WordPress apri Plugin → Aggiungi nuovo → Carica plugin.
  3. Seleziona il file ZIP e clicca Installa ora.
  4. Clicca Attiva plugin.
  5. Apri Impostazioni → Two-Factor Authentication per iniziare la configurazione.

Dopo l’attivazione la 2FA è disabilitata a livello globale per default. Nessun utente viene forzato nel nuovo flusso di login finché l’amministratore non abilita la funzione e assegna i requisiti per ruolo. Questo evita di mettere fuori uso accidentalmente qualcuno durante il rollout iniziale.

Configurazione

Tutte le impostazioni vivono sotto Impostazioni → Two-Factor Authentication e sono distribuite su quattro tab: Generale, Ruoli, Whitelist IP e Avanzate.

Generale

La tab Generale controlla il comportamento della challenge 2FA una volta abilitata.

Impostazioni generali
Impostazioni generali
ImpostazioneDescrizione
Abilita 2FAMaster switch. A OFF il plugin è inerte e nessuna challenge viene mostrata al login.
Nome azienda / issuerL’etichetta che appare accanto alla voce nell’app authenticator dell’utente. Usa il nome del sito o dell’organizzazione.
Finestra codiceNumero di intervalli da 30 secondi accettati intorno al tempo corrente. Valori ammessi: 1–4. Una finestra più ampia tollera meglio il drift dell’orologio ma è leggermente meno stretta. Il default di 1 di solito va bene.
Numero codici di recuperoQuanti codici monouso emettere all’enrolment (5–20). Default: 10.
Memoria dispositivo (giorni)Per quanto tempo è valido il cookie Ricorda questo dispositivo (0–365). Imposta 0 per disabilitare del tutto la memoria dei dispositivi fidati.
Fallback OTP emailQuando abilitato, sulla schermata di challenge compare un link Invia codice via email. Il codice arriva all’indirizzo email dell’account.
Periodo di tolleranza (giorni)Per i ruoli marcati Richiesto, quanti giorni ha l’utente per completare l’enrolment dopo il primo login (0–90). Durante la tolleranza viene mostrato un banner di promemoria.

Tieni il periodo di tolleranza abbastanza lungo da coprire gli utenti che non si collegano ogni giorno. Da sette a quattordici giorni è un buon default per i siti con personale interno.

Ruoli

La tab Ruoli assegna una delle tre policy a ciascun ruolo WordPress:

Enforcement per ruolo
Enforcement per ruolo
  • Richiesto — la 2FA deve essere configurata. Allo scadere del periodo di tolleranza l’utente è obbligato a fare l’enrolment al login successivo e non può rimandare.
  • Opzionale — l’utente può fare l’enrolment dal proprio profilo, ma non è mai forzato.
  • Disabilitato — la sezione 2FA è nascosta nel profilo utente e il login resta a singolo fattore.

Una configurazione hardened tipica è così:

RuoloPolicy consigliata
AdministratorRichiesto
EditorRichiesto
Shop manager / AuthorRichiesto o Opzionale
Subscriber / CustomerOpzionale

Imposta prima Administrator su Richiesto e completa il tuo enrolment prima di alzare il requisito per gli altri ruoli. Tieni sempre almeno una sessione admin aperta in un secondo browser mentre fai i test.

Whitelist IP

La tab Whitelist IP accetta una voce per riga, in forma di indirizzo singolo o CIDR:

203.0.113.42 198.51.100.0/24 10.0.0.0/8 2001:db8::/32
Whitelist IP
Whitelist IP

I login da un indirizzo in whitelist saltano la challenge 2FA ma passano comunque per il normale controllo username + password. È pensato per reti d’ufficio fidate, jump host o agent di monitoring.

Metti in whitelist solo sorgenti server-to-server. Non inserire range residenziali o di rete mobile: i loro indirizzi ruotano e sono condivisi con migliaia di utenti scorrelati.

Avanzate

Two-Factor Auth — tab Avanzate
Tab Avanzate — gate XML-RPC e REST API, più il toggle distruttivo Cancella tutto alla disinstallazione.

La tab Avanzate controlla l’integrazione con la superficie di richiesta WordPress e la retention dei dati:

  • Proteggi XML-RPC — quando abilitato, le richieste a xmlrpc.php vengono rifiutate se non includono una application password valida legata a un utente che ha completato l’enrolment 2FA. Se non usi XML-RPC (la maggior parte dei siti moderni non lo fa) puoi lasciare la protezione attiva.
  • Proteggi REST API — gli endpoint REST autenticati controllano che l’utente chiamante abbia soddisfatto la 2FA. Gli endpoint anonimi (ad esempio il feed pubblico dei post) restano intatti. Per una singola sessione di lavoro puoi bypassare cancellando l’opzione tfa_protect_rest_api.
  • Cancella tutti i dati alla disinstallazione — quando abilitato, rimuovere il plugin da Plugin → Plugin installati elimina anche ogni opzione, secret utente, codice di recupero e record di dispositivo. Lascialo off se prevedi disattivazioni temporanee.

Traduzioni

Two-Factor Auth — tab Traduzioni
Tab Traduzioni — sovrascrivi ogni stringa visibile della 2FA per lingua (italiano / inglese / francese / tedesco / spagnolo / …) senza toccare i file .po.

La tab Traduzioni espone ogni stringa visibile emessa dal plugin — i prompt della challenge di login, le istruzioni di enrolment, i messaggi “troppi tentativi” e il flusso di recupero — e ti permette di sovrascrivere ciascuna per lingua attiva del sito. È la strada raccomandata per ritocchi di tono e wording brand-specific; i file .po inclusi continuano a fornire la traduzione di base quando non c’è un override.

Utilizzo

Per gli amministratori

  1. Apri Impostazioni → Two-Factor Authentication → Generale e abilita la 2FA a livello globale.
  2. Imposta il Nome azienda / issuer con il nome del tuo sito, in modo che gli utenti riconoscano la voce nell’app authenticator.
  3. Scegli un Periodo di tolleranza che dia agli utenti esistenti il tempo di completare l’enrolment — quattordici giorni è un default sicuro.
  4. Passa alla tab Ruoli e imposta Administrator su Richiesto.
  5. Esci e completa il tuo enrolment dal profilo utente. Verifica che la challenge di login appaia e che un codice di recupero funzioni.
  6. Torna alla tab Ruoli e abilita progressivamente l’enforcement su Editor, Shop Manager e ogni altro ruolo privilegiato.
  7. Opzionalmente aggiungi reti fidate nella tab Whitelist IP.
  8. Comunica il rollout al team qualche giorno prima della scadenza della tolleranza.

Resettare un utente bloccato fuori

Se un utente perde il telefono e tutti i codici di recupero:

  1. Apri Utenti → Tutti gli utenti e modifica l’account interessato.
  2. Scorri fino alla sezione Two-Factor Authentication.
  3. Clicca Reset 2FA. Il secret, i codici di recupero e i dispositivi fidati dell’utente vengono azzerati.
  4. Al login successivo l’utente è trattato come un nuovo enrolment e ripercorre il flusso QR.

Solo gli amministratori possono resettare la 2FA per un altro utente. L’azione viene registrata nell’activity log di WordPress se è installato un plugin di audit.

Per gli utenti finali (enrolment, login, recupero)

Primo enrolment

  1. Accedi a WordPress con username e password.
  2. Apri Utenti → Profilo (o Ciao → Modifica profilo).
  3. Scorri fino alla card Two-Factor Authentication e clicca Abilita autenticazione a due fattori.
  4. Installa un’app authenticator sul telefono se non ne hai già una. App consigliate:
    • Google Authenticator (iOS, Android)
    • Microsoft Authenticator (iOS, Android)
    • Authy (iOS, Android, desktop)
    • 1Password o Bitwarden (integrate nel password manager)
  5. Apri l’app e scegli Aggiungi account → Scansiona QR code.
  6. Scansiona il QR mostrato sulla pagina profilo di WordPress. Se la scansione fallisce, tocca Inserisci chiave manuale e digita il secret mostrato sotto al QR.
  7. L’app inizia a produrre un nuovo codice a 6 cifre ogni 30 secondi. Digita il codice corrente nel campo Verifica codice e clicca Attiva.
  8. WordPress mostra i tuoi codici di recupero. Scaricali o stampali e conservali in un posto sicuro — un vault del password manager o una busta sigillata. Ogni codice è valido una sola volta.
  9. Conferma di aver salvato i codici di recupero. L’enrolment è completo.

Login quotidiano

  1. Inserisci username e password come al solito.
  2. Nella schermata successiva apri l’app authenticator e leggi il codice a 6 cifre corrente.
  3. Digita il codice nel campo della challenge e clicca Verifica.
  4. Opzionale: spunta Ricorda questo dispositivo per 30 giorni (il limite dipende dall’impostazione Memoria dispositivo dell’amministratore). Fallo solo su dispositivi che controlli.
  5. Sei dentro.

Se sbagli a digitare, riprova — l’app mostra un nuovo codice ogni 30 secondi. Errori ripetuti faranno scattare i normali lockout di WordPress.

Usare un codice di recupero

Quando non hai il telefono con te:

  1. Nella schermata della challenge 2FA clicca Usa un codice di recupero.
  2. Digita uno dei codici che hai salvato all’enrolment. I trattini sono opzionali.
  3. Dopo il login apri il profilo e clicca Rigenera codici di recupero. I codici di recupero sono monouso; quello appena speso non è più valido.

Fallback OTP via email

Se l’amministratore ha abilitato il fallback OTP via email, vedrai anche Invia codice via email sulla schermata di challenge. Cliccando, un codice usa-e-getta valido dieci minuti arriva sull’email dell’account. È pensato come opzione d’emergenza — eredita la sicurezza della tua casella di posta, quindi non è forte come un codice TOTP.

Disabilitare la 2FA sul tuo account

Se il tuo ruolo è Opzionale, apri Utenti → Profilo, scorri fino a Two-Factor Authentication e clicca Disabilita. Se il tuo ruolo è Richiesto questo pulsante è nascosto e solo un amministratore può azzerare il tuo enrolment.

FAQ

Quali app authenticator sono supportate? Qualsiasi app che implementi RFC 6238 TOTP con periodo di 30 secondi e codici a 6 cifre. Include Google Authenticator, Microsoft Authenticator, Authy, 1Password, Bitwarden, Duo, FreeOTP e la maggior parte dei token hardware con supporto TOTP.

Si può spostare il secret su un nuovo telefono? Sì. App come Authy e 1Password sincronizzano automaticamente il secret tra dispositivi. Con Google Authenticator l’utente può esportare gli account dal vecchio telefono o, se non è più possibile, un amministratore può resettare il secret e rifare l’enrolment.

Cosa succede durante il periodo di tolleranza? Gli utenti obbligati vedono un banner di promemoria su ogni pagina admin e un pulsante Configura 2FA sul profilo. Allo scadere della tolleranza, il login successivo forza l’enrolment prima di arrivare alla dashboard.

I codici di recupero sono riutilizzabili? No. Ogni codice di recupero è monouso. Appena consumato viene invalidato. Gli utenti possono rigenerare l’intero set dal profilo in qualsiasi momento; rigenerare invalida il vecchio set.

Posso disabilitare la 2FA temporaneamente durante una migrazione? Sì. Apri Impostazioni → Two-Factor Authentication → Generale e spegni il master switch. Secret utente e codici di recupero restano nel database, quindi riabilitando la feature si ripristina ogni enrolment esistente senza forzare gli utenti a rifarlo.

Il plugin funziona con WP-CLI? WP-CLI bypassa il flusso di login web e non è soggetto alla 2FA. Limita l’accesso WP-CLI a livello di sistema operativo (chiave SSH, sudoers, jump host).

XML-RPC è ancora davvero in uso? La maggior parte delle integrazioni moderne è passata alla REST API o alle application password. Se non ti serve XML-RPC, lascia la protezione attiva o disabilita l’endpoint a livello di web server.

2FA Auth Pilot funziona accanto ad altri plugin 2FA? No. Far girare due plugin 2FA in parallelo porta a doppi prompt e stati inconsistenti. Disattiva qualunque altro plugin 2FA prima di attivare 2FA Auth Pilot.

Supporta hardware security key (WebAuthn / FIDO2)? La versione attuale è focalizzata su TOTP ed email OTP. Il supporto alle chiavi hardware è nella roadmap.

Dove sono memorizzati i secret? Il secret TOTP di ciascun utente e gli hash dei codici di recupero sono memorizzati nella tabella user-meta di WordPress, sullo stesso database del resto del sito. I codici di recupero sono memorizzati hashati; il plaintext è mostrato una sola volta in fase di generazione.

Troubleshooting

“Codice non valido” anche se l’app mostra il numero giusto. La causa più comune è il drift dell’orologio. I codici TOTP sono legati al tempo corrente con risoluzione di 30 secondi. Controlla che l’orologio del server sia sincronizzato (NTP / chrony) e che il telefono sia su orario Automatico. Come workaround temporaneo, alza la Finestra codice nelle impostazioni Generali a 2 o 3.

Un utente ha perso il telefono e tutti i codici di recupero. Un amministratore può resettare la 2FA da Utenti → Tutti gli utenti → Modifica utente → Reset 2FA. L’utente rifarà il flusso QR al login successivo. Se l’utente bloccato fuori è l’unico amministratore, vedi il punto successivo.

L’unico amministratore è bloccato fuori. Collegati al database (phpMyAdmin o WP-CLI) e cancella le righe user-meta rilevanti:

DELETE FROM wp_usermeta WHERE user_id = <admin-id> AND meta_key LIKE 'tfa\_auth\_pilot%';

L’amministratore farà login normalmente e potrà rifare l’enrolment.

Il QR code non viene mostrato. Controlla che PHP abbia l’estensione GD abilitata. Se GD manca, il plugin ricade su una chiave testuale — l’utente può digitare il secret nell’app authenticator.

I messaggi OTP via email non arrivano. Manda un’email di test dal tuo plugin di posta transazionale (ad esempio Mail Pilot → Test email). Se quel test fallisce, sistema prima la configurazione mail in uscita. I codici vengono anche scritti nell’activity log di WordPress se è installato un plugin di audit.

L’integrazione REST API improvvisamente restituisce 401. Abilitare Proteggi REST API richiede che le chiamate autenticate vengano da un utente che ha soddisfatto la 2FA. Sposta l’integrazione su application password emesse da un utente il cui ruolo ha la 2FA soddisfatta.

Il login è lento dopo aver abilitato la 2FA. Un piccolo ritardo (meno di un secondo) è atteso per via dell’email OTP e del rendering della challenge. Ritardi maggiori indicano di solito un timeout del mail server. Disabilita temporaneamente il fallback OTP email per confermare.

I cookie dei dispositivi fidati spariscono subito. I dispositivi sono tracciati da un cookie firmato legato al browser. Finestre private/incognito, pulitori aggressivi di cookie e content blocker possono toglierlo. In quegli ambienti riduci l’affidamento su Ricorda questo dispositivo.

Per qualsiasi caso non coperto qui, contatta il supporto con: versione di WordPress, versione PHP, plugin attivi, il messaggio di errore esatto e una breve descrizione dei passi che lo riproducono.

Last updated on