Přeskočit na obsah

ADR-006: Implementace dvoufaktorové autentizace

Navrženo

XOOPS vyžaduje vylepšené zabezpečení pro ověřování uživatelů. Dvoufaktorová autentizace (2FA) poskytuje další vrstvu zabezpečení nad rámec hesel a chrání účty, i když jsou hesla prozrazena.

Klíčové aspekty:

  • Zpětná kompatibilita se stávající autentizací
  • Podpora více metod 2FA
  • Uživatelská zkušenost během nastavování a přihlašování
  • Mechanismy obnovy ztracených zařízení
  • Integrace se stávajícím systémem povolení

Implementujeme TOTP (Time-based One-Time Password) jako primární metodu 2FA s podporou záložních kódů.

Implementační přístup

Sekce “Implementační přístup”
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);
}
}
  • Výrazně vylepšené zabezpečení účtu
  • Kompatibilita s průmyslovým standardem TOTP (Google Authenticator, Authy atd.)
  • Záložní kódy zabraňují uzamčení účtu
  • Volitelné pro uživatele - nevynucuje si přijetí
  • Middleware PSR-15 umožňuje čistou integraci
  • Další krok přihlášení ovlivňuje uživatelskou zkušenost
  • Uživatelé musí spravovat ověřovací aplikace
  • Ztracená zařízení vyžadují proces obnovy
  • Další úložiště databáze a dotazy
  • Vyžaduje závislost na kryptografické knihovně
  1. Přidejte databázovou tabulku pro data 2FA
  2. Implementujte službu TOTP se závislostí na knihovně
  3. Přidejte middleware do řetězce ověřování
  4. Vytvořte uživatelské rozhraní pro nastavení a ověření
  5. Možnost správce vyžadovat 2FA pro konkrétní skupiny

ZXQPH000016 na bázi QXZ OTP

Sekce “ZXQPH000016 na bázi QXZ OTP”

Odmítnuto z důvodu:

  • SIM zranitelnosti při výměně
  • Náklady na bránu SMS
  • Složitost ověřování telefonního čísla
  • Obavy o soukromí

Hardwarové bezpečnostní klíče (WebAuthn)

Sekce “Hardwarové bezpečnostní klíče (WebAuthn)”

Odloženo pro budoucí ADR:

  • Složitější implementace
  • Historicky omezená podpora prohlížeče
  • Vyšší uživatelské náklady
  • Může být přidán vedle TOTP později

Odmítnuto z důvodu:

  • Kompromis e-mailového účtu maří účel
  • Zpoždění doručení má vliv na UX
  • Problémy s filtrem spamu