2FA Auth Pilot
2FA Auth Pilot adaugă un strat suplimentar de securitate peste login-ul WordPress, cerând un al doilea pas de verificare după userul și parola. Plugin-ul implementează algoritmul standard din industrie Time-based One-Time Password (TOTP) (RFC 6238) și funcționează cu orice aplicație authenticator compatibilă, inclusiv Google Authenticator, Microsoft Authenticator, Authy, 1Password și Duo.
Chiar dacă o parolă este furată, obținută prin phishing sau refolosită, atacatorii nu pot finaliza login-ul fără codul one-time generat pe dispozitivul utilizatorului. Administratorii pot impune 2FA per rol, pot defini o perioadă de grație în care utilizatorii trebuie să se înroleze și pot pune în whitelist intervale IP de încredere care să fie exceptate de la al doilea factor.

Puncte forte
- Autentificare TOTP compatibilă cu orice aplicație authenticator RFC 6238 (Google Authenticator, Microsoft Authenticator, Authy, 1Password, Duo, FreeOTP, …).
- Fallback OTP pe email care trimite un cod de verificare din 6 cifre pe email atunci când aplicația authenticator nu este disponibilă.
- Coduri de recuperare: 5–20 coduri backup de unică folosință generate la înrolare, pentru acces de urgență.
- Aplicare per rol: fiecare rol WordPress poate fi setat ca Obligatoriu, Opțional sau Dezactivat.
- Perioadă de grație de până la 90 de zile pentru rolurile obligatorii, astfel încât utilizatorii existenți să nu fie blocați chiar în momentul în care activezi 2FA.
- Whitelist IP cu notație IPv4 și CIDR pentru a sări peste 2FA în rețelele de încredere (birou, VPN, monitoring).
- Memorarea dispozitivelor de încredere: opțiunea Ține minte acest dispozitiv poate suprima cererea 2FA până la 365 de zile pe un anumit browser.
- Protecție API: XML-RPC și WordPress REST API pot fi gate-uite în spatele unor verificări care iau în calcul 2FA.
- Înrolare cu cod QR și fallback pe secret manual pentru medii unde codul QR nu poate fi scanat.
- Fereastră temporală configurabilă (1–4 intervale) pentru a compensa drift-ul de ceas între server și dispozitivul utilizatorului.
- Dezinstalare curată care șterge toate datele plugin-ului atunci când e dezinstalat.
Cerințe
- WordPress 6.0 sau mai nou.
- PHP 7.4 sau mai nou (recomandat PHP 8.x).
- Un ceas server precis. TOTP se bazează pe sincronizarea temporală; un drift mai mare de 90 de secunde va face ca toate codurile valide să fie respinse.
- O aplicație authenticator instalată pe smartphone-ul, tableta sau password manager-ul fiecărui utilizator.
- Pentru fallback-ul OTP pe email, un setup de outgoing-mail funcțional (plugin-ul companion Mail Pilot sau orice integrare SMTP este suficient).
Instalare
- Descarcă arhiva ZIP a plugin-ului.
- În adminul WordPress, deschide Plugins → Add New → Upload Plugin.
- Selectează fișierul ZIP și apasă Install Now.
- Apasă Activate Plugin.
- Deschide Settings → Two-Factor Authentication ca să începi configurarea.
După activare, 2FA este dezactivat global din start. Niciun utilizator nu este forțat în noul flow de login până când administratorul nu activează funcția și nu setează cerințele pe roluri. Așa eviți să blochezi pe cineva accidental în timpul rollout-ului inițial.
Configurare
Toate setările sunt sub Settings → Two-Factor Authentication și sunt împărțite în patru taburi: General, Roluri, Whitelist IP și Avansat.
General
Tabul General controlează cum se comportă challenge-ul 2FA odată activat.

| Setare | Descriere |
|---|---|
| Activează 2FA | Comutator principal. Când e oprit, plugin-ul este inactiv și nu se afișează niciun challenge la login. |
| Nume companie / issuer | Eticheta care apare lângă intrare în aplicația authenticator a utilizatorului. Folosește numele site-ului sau al organizației. |
| Fereastră cod | Numărul de intervale de 30 de secunde acceptate în jurul timpului curent. Sunt permise valori 1–4. O fereastră mai largă este mai tolerantă la drift, dar puțin mai puțin strictă. Default-ul 1 este de obicei suficient. |
| Număr coduri de recuperare | Câte coduri backup de unică folosință sunt emise la înrolare (5–20). Default-ul este 10. |
| Memorare dispozitiv (zile) | Cât timp este valid cookie-ul Ține minte acest dispozitiv (0–365). Setează 0 pentru a dezactiva complet memorarea dispozitivelor. |
| Fallback OTP pe email | Când e activ, pe ecranul de challenge apare un link Trimite codul pe email. Codul este livrat pe email-ul de cont al utilizatorului. |
| Perioadă de grație (zile) | Pentru rolurile marcate Obligatoriu, câte zile au utilizatorii la dispoziție pentru a finaliza înrolarea după primul login (0–90). În perioada de grație se afișează un banner de reminder. |
Lasă perioada de grație suficient de lungă pentru utilizatorii care nu se loghează zilnic. Șapte–paisprezece zile este un default echilibrat pentru site-urile de echipă.
Roluri
Tabul Roluri atribuie una din trei politici fiecărui rol WordPress:

- Obligatoriu — 2FA trebuie configurat. Când perioada de grație expiră, utilizatorul este forțat să se înroleze la următorul login și nu poate închide promptul.
- Opțional — Utilizatorii se pot înrola din profil, dar nu sunt forțați niciodată.
- Dezactivat — Tabul 2FA este ascuns în profilul utilizatorului, iar flow-ul de login rămâne single-factor.
O configurație tipică de hardening arată așa:
| Rol | Politică recomandată |
|---|---|
| Administrator | Obligatoriu |
| Editor | Obligatoriu |
| Shop manager / Author | Obligatoriu sau Opțional |
| Subscriber / Customer | Opțional |
Setează mai întâi Administrator pe Obligatoriu și finalizează-ți propria înrolare înainte să ridici cerința pentru alte roluri. Ține mereu măcar o sesiune de admin deschisă într-un al doilea browser în timp ce testezi.
Whitelist IP
Tabul whitelist IP acceptă o intrare per linie, fie ca adresă unică, fie în formă CIDR:
203.0.113.42
198.51.100.0/24
10.0.0.0/8
2001:db8::/32
Login-urile care vin de la o adresă din whitelist sar peste challenge-ul 2FA, dar trec totuși prin verificarea normală de username și parolă. Asta este gândit pentru rețele de birou de încredere, jump host-uri sau agenți de monitoring.
Pune în whitelist doar surse server-to-server. Nu pune în whitelist intervale rezidențiale sau de rețea mobilă; adresele lor se rotesc și sunt partajate între mii de utilizatori fără nicio legătură între ei.
Avansat

Tabul Avansat controlează integrarea cu suprafața de request a WordPress și retenția datelor:
- Protejează XML-RPC — Când e activ, request-urile către
xmlrpc.phpsunt respinse dacă nu includ o application password validă legată de un utilizator care a finalizat înrolarea 2FA. Dacă nu folosești XML-RPC (majoritatea site-urilor moderne nu îl folosesc), poți lăsa protecția pornită. - Protejează REST API — Endpoint-urile REST autentificate verifică dacă utilizatorul apelant a satisfăcut 2FA. Endpoint-urile anonime (cum ar fi feed-ul public de articole) rămân neatinse. Pentru o singură sesiune de captură, dezactivează opțiunea
tfa_protect_rest_api. - Șterge toate datele la dezinstalare — Când e activ, eliminarea plugin-ului din Plugins → Installed Plugins șterge și fiecare opțiune, secret de utilizator, cod de recuperare și înregistrare de dispozitiv. Lasă off dacă plănuiești să dezactivezi temporar.
Traduceri

Tabul Traduceri expune fiecare string vizibil pentru vizitator pe care plugin-ul îl emite — prompturile de challenge la login, instrucțiunile de înrolare, mesajele „too many attempts” și flow-ul de recuperare — și îți permite să le suprascrii pe fiecare per limbă activă pe site. Asta este calea recomandată pentru schimbări de ton și formulări branduite; fișierele .po incluse continuă să ofere traducerea de bază când nu e setată nicio suprascriere.
Utilizare
Pentru administratori
- Deschide Settings → Two-Factor Authentication → General și activează 2FA global.
- Setează Nume companie / issuer la numele site-ului, ca utilizatorii să recunoască intrarea în aplicația authenticator.
- Alege o Perioadă de grație care lasă timp utilizatorilor existenți să se înroleze — paisprezece zile este un default sigur.
- Treci pe tabul Roluri și setează Administrator pe Obligatoriu.
- Fă logout și finalizează-ți propria înrolare din profilul de utilizator. Verifică faptul că apare challenge-ul de login și că un cod de recuperare funcționează.
- Întoarce-te pe tabul Roluri și activează progresiv aplicarea pentru Editor, Shop Manager și orice alt rol privilegiat.
- Opțional, adaugă rețele de încredere în tabul Whitelist IP.
- Comunică rollout-ul echipei cu câteva zile înainte ca perioada de grație să expire.
Resetarea unui utilizator blocat
Dacă un utilizator își pierde telefonul și toate codurile de recuperare:
- Deschide Users → All Users și editează contul afectat.
- Derulează la secțiunea Two-Factor Authentication.
- Apasă Reset 2FA. Secretul, codurile de recuperare și dispozitivele de încredere ale utilizatorului sunt șterse.
- La următorul login, utilizatorul este tratat ca o înrolare nouă și trece din nou prin flow-ul cu cod QR.
Doar administratorii pot reseta 2FA pentru alt utilizator. Acțiunea este înregistrată în log-ul de activitate WordPress, dacă există un plugin de audit instalat.
Pentru utilizatorii finali (înrolare, login, recuperare)
Înrolare pentru prima dată
- Loghează-te în WordPress cu user și parolă.
- Deschide Users → Profile (sau Howdy → Edit Profile).
- Derulează la cardul Two-Factor Authentication și apasă Enable two-factor authentication.
- Instalează o aplicație authenticator pe telefon dacă nu ai una. Aplicații recomandate:
- Google Authenticator (iOS, Android)
- Microsoft Authenticator (iOS, Android)
- Authy (iOS, Android, desktop)
- 1Password sau Bitwarden (incluse în password manager)
- Deschide aplicația și alege Add account → Scan QR code.
- Scanează codul QR afișat pe pagina de profil WordPress. Dacă scanarea eșuează, apasă Enter setup key și tastează secretul de sub codul QR.
- Aplicația începe să genereze un cod nou din 6 cifre la fiecare 30 de secunde. Tastează codul curent în câmpul Verify code și apasă Activate.
- WordPress afișează codurile tale de recuperare. Descarcă-le sau printează-le și păstrează-le într-un loc sigur — un seif de password manager sau un plic sigilat. Fiecare cod funcționează o singură dată.
- Confirmă că ai salvat codurile de recuperare. Înrolarea este completă.
Login zi de zi
- Introdu userul și parola ca de obicei.
- Pe ecranul următor, deschide aplicația authenticator și citește codul curent din 6 cifre.
- Tastează codul în câmpul de challenge și apasă Verify.
- Opțional: bifează Ține minte acest dispozitiv timp de 30 de zile (limita depinde de setarea Memorare dispozitiv a administratorului). Fă asta doar pe dispozitive pe care le controlezi.
- Ești autentificat.
Dacă tastezi greșit codul, încearcă din nou — aplicația afișează un cod nou la fiecare 30 de secunde. Eșecuri repetate vor declanșa, în cele din urmă, protecțiile standard de login-lockout din WordPress.
Folosirea unui cod de recuperare
Când nu ai telefonul la tine:
- Pe ecranul de challenge 2FA, apasă Use a recovery code.
- Tastează unul dintre codurile salvate la înrolare. Cratimele sunt opționale.
- După ce te-ai autentificat, deschide profilul și apasă Regenerate recovery codes. Codurile de recuperare sunt de unică folosință; cel pe care tocmai l-ai consumat nu mai e valid.
Fallback OTP pe email
Dacă administratorul a activat fallback-ul OTP pe email, vei vedea și Send code by email pe ecranul de challenge. Apăsându-l, primești pe email-ul de cont un cod one-time valabil zece minute. Asta este gândită ca opțiune de urgență — moștenește securitatea inbox-ului tău, deci nu este la fel de puternică precum un cod TOTP.
Dezactivarea 2FA pe contul tău
Dacă rolul tău este Opțional, deschide Users → Profile, derulează la Two-Factor Authentication și apasă Disable. Dacă rolul tău este Obligatoriu, acest buton este ascuns și doar un administrator îți poate șterge înrolarea.
FAQ
Ce aplicații authenticator sunt suportate? Orice aplicație care implementează TOTP RFC 6238 cu perioada default de 30 de secunde și coduri din 6 cifre. Asta include Google Authenticator, Microsoft Authenticator, Authy, 1Password, Bitwarden, Duo, FreeOTP și majoritatea token-urilor hardware cu suport TOTP.
Pot utilizatorii să-și mute secretul pe un telefon nou? Da. Aplicații ca Authy și 1Password sincronizează secretul între dispozitive automat. Cu Google Authenticator, utilizatorul poate exporta conturile de pe telefonul vechi sau, dacă asta nu mai e posibil, un administrator poate reseta secretul și utilizatorul se re-înrolează.
Ce se întâmplă în perioada de grație? Utilizatorii din rolurile obligatorii văd un banner de reminder pe fiecare pagină de admin și un buton Set up 2FA pe profil. Când perioada de grație se termină, următorul login forțează înrolarea înainte ca utilizatorul să ajungă pe dashboard.
Codurile de recuperare se pot refolosi? Nu. Fiecare cod de recuperare este de unică folosință. Imediat ce unul e consumat, este invalidat. Utilizatorii pot regenera oricând setul complet din profil; regenerarea invalidează setul vechi.
Pot dezactiva 2FA temporar pe perioada unei migrări? Da. Deschide Settings → Two-Factor Authentication → General și oprește comutatorul principal. Secretele utilizatorilor și codurile de recuperare rămân în baza de date, deci când reactivezi funcția, fiecare înrolare existentă revine fără ca utilizatorii să fie obligați să se înroleze din nou.
Funcționează plugin-ul cu WP-CLI? WP-CLI ocolește flow-ul web de login și nu este supus 2FA. Restricționează accesul la WP-CLI la nivel de sistem de operare (cheie SSH, sudoers, jump host).
Mai este XML-RPC chiar folosit? Majoritatea integrărilor moderne au trecut pe REST API sau pe application passwords. Dacă nu ai nevoie de XML-RPC, lasă protecția activă sau dezactivează endpoint-ul la nivel de web server.
Va funcționa 2FA Auth Pilot alături de alte plugin-uri 2FA? Nu. Două plugin-uri 2FA active simultan duc la prompturi duble și la stări inconsistente. Dezactivează orice alt plugin 2FA înainte să activezi 2FA Auth Pilot.
Suportă chei hardware de securitate (WebAuthn / FIDO2)? Versiunea actuală se concentrează pe TOTP și OTP pe email. Suportul pentru chei hardware este pe roadmap.
Unde sunt stocate secretele? Secretul TOTP al fiecărui utilizator și hash-urile codurilor de recuperare sunt stocate în tabelul user-meta WordPress, pe aceeași bază de date ca restul site-ului. Codurile de recuperare sunt hashed; plaintext-ul este afișat o singură dată, la generare.
Depanare
„Invalid code” deși aplicația afișează numărul corect.
Cea mai frecventă cauză este drift-ul de ceas. Codurile TOTP sunt legate de timpul curent la o rezoluție de 30 de secunde. Verifică să fie sincronizat ceasul serverului (NTP / chrony) și să fie setat ceasul telefonului pe Automat. Ca workaround temporar, mărește Fereastra de cod din setările Generale la 2 sau 3.
Un utilizator și-a pierdut telefonul și toate codurile de recuperare. Un administrator poate reseta 2FA pentru utilizator din Users → All Users → Edit user → Reset 2FA. Utilizatorul va trece din nou prin flow-ul cu cod QR la următorul login. Dacă utilizatorul blocat este singurul administrator, vezi punctul următor.
Singurul administrator este blocat. Conectează-te la baza de date (phpMyAdmin sau WP-CLI) și șterge rândurile user-meta relevante:
DELETE FROM wp_usermeta
WHERE user_id = <admin-id>
AND meta_key LIKE 'tfa\_auth\_pilot%';Administratorul se va putea apoi loga normal și se va putea re-înrola.
Codul QR nu se afișează. Verifică să fie activă extensia GD în PHP. Dacă GD lipsește, plugin-ul revine la o cheie de setup în mod text — utilizatorul poate tasta secretul manual în aplicația authenticator.
Mesajele OTP pe email nu sosesc. Trimite un email de test din plugin-ul tău de mail tranzacțional (de exemplu Mail Pilot → Test email). Dacă testul ăla eșuează, repară mai întâi configurația de outgoing-mail. Codurile sunt scrise și în log-ul de activitate WordPress, dacă există un plugin de audit instalat.
Integrarea REST API returnează brusc 401. Activarea Protect REST API impune ca apelurile autentificate să vină de la un utilizator care a finalizat 2FA. Schimbă integrarea să folosească application passwords emise de un utilizator al cărui rol satisface 2FA.
Login-ul este lent după activarea 2FA. O mică întârziere (sub o secundă) este așteptată din cauza randării email-OTP-ului și a challenge-ului. Întârzieri mai mari indică de obicei un timeout pe mail server. Dezactivează temporar fallback-ul OTP pe email pentru a confirma.
Cookie-urile de dispozitiv de încredere dispar imediat. Dispozitivele sunt urmărite printr-un cookie semnat legat de browser. Ferestrele private/incognito, cookie cleanerele agresive și content blockerele îl pot șterge. Redu dependența de Ține minte acest dispozitiv în aceste medii.
Pentru orice nu e acoperit aici, contactează suportul cu: versiunea WordPress, versiunea PHP, plugin-urile active, mesajul exact de eroare și o descriere scurtă a pașilor care duc la el.