Skip to content

ADR-006: Implementacija dvofaktorske provjere autentičnosti

Predloženi

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

Implementirat ćemo TOTP (Time-based One-Time Password) kao primarnu 2FA metodu s podrškom za pričuvne kodove.

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 successful
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`)
);
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;
}
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);
}
}
  • 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
  • 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
  1. Dodajte tablicu baze podataka za 2FA podatke
  2. Implementirajte TOTP uslugu s ovisnošću o knjižnici
  3. Dodajte međuprogram u lanac provjere autentičnosti
  4. Stvorite korisničko sučelje za postavljanje i provjeru
  5. Administratorska opcija da zahtijeva 2FA za određene grupe

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

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