ADR-006: Implementacija dvofaktorske provjere autentičnosti
Status
Section titled “Status”Predloženi
Kontekst
Section titled “Kontekst”XOOPS treba poboljšanu sigurnost za provjeru autentičnosti korisnika. Dvofaktorska autentifikacija (2FA) pruža dodatni sloj sigurnosti osim lozinki, štiteći račune čak i ako su lozinke ugrožene.
Ključna razmatranja:
- Povratna kompatibilnost s postojećom autentifikacijom
- Podrška za više 2FA metoda
- Korisničko iskustvo tijekom postavljanja i prijave
- Mehanizmi za oporavak izgubljenih uređaja
- Integracija s postojećim sustavom dozvola
Odluka
Section titled “Odluka”Implementirat ćemo TOTP (Time-based One-Time Password) kao primarnu 2FA metodu s podrškom za pričuvne kodove.
Pristup implementacije
Section titled “Pristup implementacije”sequenceDiagram participant U as User participant X as XOOPS participant T as TOTP Library participant D as Database
U->>X: Login with password X->>D: Validate password D-->>X: Password valid X->>D: Check 2FA enabled D-->>X: 2FA required X->>U: Request 2FA code U->>X: Submit TOTP code X->>T: Validate code T-->>X: Code valid X->>U: Login successfulShema baze podataka
Section titled “Shema baze podataka”CREATE TABLE `{PREFIX}_users_2fa` ( `user_id` INT(11) NOT NULL, `secret` VARCHAR(32) NOT NULL, `enabled` TINYINT(1) DEFAULT 0, `backup_codes` TEXT, `last_used` INT(11), `created` INT(11) NOT NULL, PRIMARY KEY (`user_id`), FOREIGN KEY (`user_id`) REFERENCES `{PREFIX}_users`(`uid`));Servisno sučelje
Section titled “Servisno sučelje”interface TwoFactorAuthInterface{ public function enable(int $userId): TwoFactorSetup; public function disable(int $userId): void; public function verify(int $userId, string $code): bool; public function generateBackupCodes(int $userId): array; public function isEnabled(int $userId): bool;}Integracija međuprograma
Section titled “Integracija međuprograma”class TwoFactorMiddleware implements MiddlewareInterface{ public function process( ServerRequestInterface $request, RequestHandlerInterface $handler ): ResponseInterface { $session = $request->getAttribute('session');
if ($session->has('pending_2fa_user_id')) { // User needs to complete 2FA if ($this->isVerificationRequest($request)) { return $handler->handle($request); } return new RedirectResponse('/2fa/verify'); }
return $handler->handle($request); }}Posljedice
Section titled “Posljedice”Pozitivno
Section titled “Pozitivno”- Značajno poboljšana sigurnost računa
- TOTP kompatibilnost s industrijskim standardima (Google Authenticator, Authy itd.)
- Pričuvni kodovi sprječavaju zaključavanje računa
- Izborno po korisniku - ne prisiljava usvajanje
- PSR-15 međuware omogućuje čistu integraciju
Negativno
Section titled “Negativno”- Dodatni korak prijave utječe na korisničko iskustvo
- Korisnici moraju upravljati aplikacijama za autentifikaciju
- Izgubljeni uređaji zahtijevaju proces oporavka
- Dodatna pohrana baze podataka i upita
- Zahtijeva ovisnost o kriptografskoj knjižnici
Migracijski put
Section titled “Migracijski put”- Dodajte tablicu baze podataka za 2FA podatke
- Implementirajte TOTP uslugu s ovisnošću o knjižnici
- Dodajte međuprogram u lanac provjere autentičnosti
- Stvorite korisničko sučelje za postavljanje i provjeru
- Administratorska opcija da zahtijeva 2FA za određene grupe
Razmotrene alternative
Section titled “Razmotrene alternative”OTP temeljen na SMS-u
Section titled “OTP temeljen na SMS-u”Odbijeno zbog:
- Ranjivosti zamjene SIM kartice
- Trošak SMS pristupnika
- Složenost provjere telefonskog broja
- Briga o privatnosti
Hardverski sigurnosni ključevi (WebAuthn)
Section titled “Hardverski sigurnosni ključevi (WebAuthn)”Odgođeno za budući ADR:
- Složenija izvedba
- Povijesno ograničena podrška preglednika
- Veći korisnički trošak
- Može se dodati uz TOTP kasnije
OTP temeljen na e-pošti
Section titled “OTP temeljen na e-pošti”Odbijeno zbog:
- Kompromitiranje računa e-pošte poništava svrhu
- Kašnjenja isporuke utječu na korisnički doživljaj
- Problemi s filterom neželjene pošte
Reference
Section titled “Reference”- RFC 6238 - TOTP
- Format ključa Google autentifikatora
- ../../02-Core-Concepts/Security/Security-Best-Practices - Sigurnosne smjernice
- ../../02-Core-Concepts/Users-Permissions/Authentication - Dokumentacija sustava autentifikacije