ADR-006: Implementasi Otentikasi Dua Faktor
Status
Section titled “Status”Diusulkan
Konteks
Section titled “Konteks”XOOPS memerlukan peningkatan keamanan untuk otentikasi pengguna. Otentikasi dua faktor (2FA) memberikan lapisan keamanan tambahan selain kata sandi, melindungi akun bahkan jika kata sandi dibobol.
Pertimbangan utama:
- Kompatibilitas mundur dengan otentikasi yang ada
- Dukungan untuk beberapa metode 2FA
- Pengalaman pengguna selama pengaturan dan login
- Mekanisme pemulihan untuk perangkat yang hilang
- Integrasi dengan sistem izin yang ada
Keputusan
Section titled “Keputusan”Kami akan menerapkan TOTP (Kata Sandi Satu Kali Berbasis Waktu) sebagai metode 2FA utama dengan dukungan untuk kode cadangan.
Pendekatan Implementasi
Section titled “Pendekatan Implementasi”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 successfulSkema Basis Data
Section titled “Skema Basis Data”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`));Antarmuka Layanan
Section titled “Antarmuka Layanan”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;}Integrasi Middleware
Section titled “Integrasi Middleware”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); }}Konsekuensi
Section titled “Konsekuensi”Positif
Section titled “Positif”- Keamanan akun meningkat secara signifikan
- Kompatibilitas TOTP standar industri (Google Authenticator, Authy, dll.)
- Kode cadangan mencegah penguncian akun
- Opsional per pengguna - tidak memaksa adopsi
- Middleware PSR-15 memungkinkan integrasi yang bersih
Negatif
Section titled “Negatif”- Langkah login tambahan memengaruhi pengalaman pengguna
- Pengguna harus mengelola aplikasi pengautentikasi
- Perangkat yang hilang memerlukan proses pemulihan
- Penyimpanan dan kueri database tambahan
- Membutuhkan ketergantungan perpustakaan kriptografi
Jalur Migrasi
Section titled “Jalur Migrasi”- Tambahkan tabel database untuk data 2FA
- Mengimplementasikan layanan TOTP dengan ketergantungan perpustakaan
- Tambahkan middleware ke rantai otentikasi
- Buat UI pengaturan dan verifikasi
- Opsi Admin untuk mewajibkan 2FA untuk grup tertentu
Alternatif Dipertimbangkan
Section titled “Alternatif Dipertimbangkan”OTP berbasis SMS
Section titled “OTP berbasis SMS”Ditolak karena:
- Kerentanan pertukaran SIM
- Biaya SMS gateway
- Kompleksitas verifikasi nomor telepon
- Masalah privasi
Kunci Keamanan Perangkat Keras (WebAuthn)
Section titled “Kunci Keamanan Perangkat Keras (WebAuthn)”Ditunda untuk ADR mendatang:
- Implementasi yang lebih kompleks
- Dukungan browser terbatas secara historis
- Biaya pengguna lebih tinggi
- Bisa ditambahkan bersama TOTP nanti
OTP berbasis email
Section titled “OTP berbasis email”Ditolak karena:
- Kompromi akun email menggagalkan tujuan
- Keterlambatan pengiriman berdampak pada UX
- Masalah filter spam
Referensi
Section titled “Referensi”- RFC 6238 - TOTP
- Format Kunci Google Authenticator
- ../../02-Core-Concepts/Security/Security-Best-Practices - Pedoman keamanan
- ../../02-Core-Concepts/Users-Permissions/Authentication - Dokumentasi sistem autentikasi