Due fattori WordPress con app: Google Authenticator, Authy e perché SMS non basta

L'SMS come secondo fattore è meglio di niente, ma è intercettabile con SIM swapping. Le app TOTP — Google Authenticator, Authy, 2FAS — sono più sicure perché non dipendono dal operatore. Come configurare il 2FA su WordPress con un'app, i codici di recupero e perché il backup del seed è la parte che tutti dimenticano.
Il secondo fattore via SMS è il primo che si attiva perché è il più semplice: l'utente non deve installare nulla, riceve un codice sul telefono. Ma è anche il più debole, e il motivo è noto a chi segue la sicurezza da anni: l'SMS è intercettabile. Il SIM swapping — convincere l'operatore a trasferire il numero su una nuova SIM — è un attacco reale, documentato, che ha colpito account di alto profilo. Se il tuo secondo fattore è un SMS e l'attaccante fa SIM swapping del tuo numero, il tuo 2FA è bypassato.
Le app TOTP — Time-based One-Time Password — risolvono questo. Generano codici a sei cifre che cambiano ogni 30 secondi, calcolati da un seed segreto condiviso tra l'app e il server. Il seed non passa più per la rete dopo la configurazione iniziale: vive sul tuo telefono e sul server. Niente SMS, niente operatore, niente SIM swapping. Google Authenticator, Authy, 2FAS, Microsoft Authenticator sono tutte app TOTP e sono intercambiabili: il seed è standard.
Configurare il 2FA su WordPress
Su WordPress il 2FA non è nativo del core: si aggiunge con un plugin. I due più affidabili sono Wordfence Login Security (leggero, solo 2FA) e Two Factor (della community, minimale). La configurazione è la stessa: si attiva il 2FA sul proprio profilo utente, si scansiona il QR code con l'app, si inserisce un codice per confermare, e si generano i codici di recupero. Da quel momento, il login richiede password + codice dell'app.
// Forzare il 2FA per gli utenti amministratori (plugin Two Factor)
// functions.php del tema child
add_filter( 'two_factor_providers_enabled', function( $providers ) {
// Abilita solo TOTP (app), disabilita email e SMS
return [ 'Two_Factor_Totp' => $providers['Two_Factor_Totp'] ?? true ];
} );
// Rendi il 2FA obbligatorio per i ruoli sensibili
add_filter( 'two_factor_user_has_token', function( $has_token, $user_id ) {
$user = get_userdata( $user_id );
if ( in_array( 'administrator', $user->roles, true ) ) {
// Se l'admin non ha 2FA configurato, blocca il login
$totp = get_user_meta( $user_id, '_two_factor_totp_key', true );
if ( empty( $totp ) ) {
return new WP_Error( '2fa_required',
'2FA obbligatorio per gli amministratori. Configuralo dal profilo.' );
}
}
return $has_token;
}, 10, 2 );I codici di recupero: il backup che tutti dimenticano
La parte che tutti dimenticano è il backup del seed e dei codici di recupero. Se perdi il telefono — perso, rubato, rotto — e non hai i codici di recupero, sei fuori dal tuo account. I codici di recupero sono monouso, generati alla configurazione, da conservare in un posto sicuro (password manager, stampati in cassaforte). Il seed — il segreto dietro il QR code — va conservato separatamente, perché permette di ricreare il 2FA su un telefono nuovo.
L'errore più comune è configurare il 2FA, non salvare i codici di recupero, e scoprire mesi dopo che servono quando il telefono si rompe. A quel punto l'unica via è il recupero manuale via database (disabilitare il 2FA direttamente in wp_usermeta), che richiede accesso al database e che va fatto con cautela perché disabilita temporaneamente la sicurezza. La regola: i codici di recupero si generano e si conservano SUBITO, non 'quando ho tempo'.
# Disabilitare il 2FA di emergenza via WP-CLI (se si è fuori)
# Richiede accesso SSH al server
# Rimuove il seed TOTP per l'utente admin
wp user meta delete 1 _two_factor_totp_key
# Rimuove i provider attivi (disabilita il 2FA per quell'utente)
wp user meta delete 1 _two_factor_enabled_providers
# ATTENZIONE: questo disabilita il 2FA — l'utente può entrare
# solo con la password. Riattivare il 2FA subito dopo il login.
# Va fatto solo in emergenza, con accesso al server protetto.Il 2FA con app TOTP è lo standard per la sicurezza del login WordPress. Non è inviolabile — nessuna misura lo è — ma alza il costo dell'attacco abbastanza da scoraggiare la maggior parte degli attaccanti, che preferiscono bersagli più facili. La differenza tra un sito con 2FA e uno senza è la differenza tra un login che richiede una password rubata più un telefono fisico, e un login che richiede solo una password rubata. Un audit di sicurezza include la verifica del 2FA sui profili sensibili e dei codici di recupero conservati correttamente.
Verifica che il 2FA sia attivo e configurato correttamente.
Un audit di sicurezza individua gli account senza 2FA, le configurazioni deboli e i codici di recupero mancanti prima che diventino un'emergenza.
Articoli correlati

Spam e anti-bot WordPress: fermare i bot senza bloccare gli utenti veri
Leggi
Zero-day WordPress: cosa fare quando esce una vulnerabilità critica
Leggi
