ADR-006: Εφαρμογή ελέγχου ταυτότητας δύο παραγόντων
Κατάσταση
Ενότητα με τίτλο «Κατάσταση»Προτάθηκε
Περιεχόμενο
Ενότητα με τίτλο «Περιεχόμενο»Το XOOPS χρειάζεται βελτιωμένη ασφάλεια για τον έλεγχο ταυτότητας χρήστη. Ο έλεγχος ταυτότητας δύο παραγόντων (2FA) παρέχει ένα πρόσθετο επίπεδο ασφάλειας πέρα από τους κωδικούς πρόσβασης, προστατεύοντας τους λογαριασμούς ακόμα και σε περίπτωση παραβίασης των κωδικών πρόσβασης.
Βασικές εκτιμήσεις:
- Συμβατότητα προς τα πίσω με υπάρχοντα έλεγχο ταυτότητας
- Υποστήριξη για πολλαπλές μεθόδους 2FA
- Εμπειρία χρήστη κατά την εγκατάσταση και τη σύνδεση
- Μηχανισμοί ανάκτησης χαμένων συσκευών
- Ενοποίηση με το υπάρχον σύστημα αδειών
Απόφαση
Ενότητα με τίτλο «Απόφαση»Θα εφαρμόσουμε το TOTP (Time-based One-Time Password) ως την κύρια μέθοδο 2FA με υποστήριξη για εφεδρικούς κωδικούς.
# Προσέγγιση Εφαρμογής
Ενότητα με τίτλο «# Προσέγγιση Εφαρμογής»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;}# Ενσωμάτωση Middleware
Ενότητα με τίτλο «# Ενσωμάτωση 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); }}Συνέπειες
Ενότητα με τίτλο «Συνέπειες»# Θετικό
Ενότητα με τίτλο «# Θετικό»- Σημαντικά βελτιωμένη ασφάλεια λογαριασμού
- Συμβατότητα TOTP με το πρότυπο του κλάδου (Google Authenticator, Authy, κ.λπ.)
- Οι εφεδρικοί κωδικοί αποτρέπουν το κλείδωμα λογαριασμού
- Προαιρετικό ανά χρήστη - δεν επιβάλλει την υιοθέτηση
- PSR-15 το ενδιάμεσο λογισμικό επιτρέπει την καθαρή ενσωμάτωση
# Αρνητικό
Ενότητα με τίτλο «# Αρνητικό»- Το πρόσθετο βήμα σύνδεσης επηρεάζει την εμπειρία χρήστη
- Οι χρήστες πρέπει να διαχειρίζονται εφαρμογές ελέγχου ταυτότητας
- Οι χαμένες συσκευές απαιτούν διαδικασία ανάκτησης
- Πρόσθετη αποθήκευση βάσης δεδομένων και ερωτήματα
- Απαιτεί εξάρτηση από κρυπτογραφική βιβλιοθήκη
# Διαδρομή Μετανάστευσης
Ενότητα με τίτλο «# Διαδρομή Μετανάστευσης»- Προσθέστε πίνακα βάσης δεδομένων για δεδομένα 2FA
- Υλοποιήστε την υπηρεσία TOTP με εξάρτηση από τη βιβλιοθήκη
- Προσθέστε ενδιάμεσο λογισμικό στην αλυσίδα ελέγχου ταυτότητας
- Δημιουργήστε διεπαφή χρήστη ρύθμισης και επαλήθευσης
- Επιλογή διαχειριστή να απαιτεί 2FA για συγκεκριμένες ομάδες
Εξετάζονται εναλλακτικές λύσεις
Ενότητα με τίτλο «Εξετάζονται εναλλακτικές λύσεις»# SMS με βάση OTP
Ενότητα με τίτλο «# SMS με βάση OTP»Απορρίφθηκε λόγω:
- SIM εναλλαγή τρωτών σημείων
- Κόστος πύλης SMS
- Πολυπλοκότητα επαλήθευσης αριθμού τηλεφώνου
- Ανησυχίες για το απόρρητο
# Κλειδιά ασφαλείας υλικού (WebAuthn)
Ενότητα με τίτλο «# Κλειδιά ασφαλείας υλικού (WebAuthn)»Αναβάλλεται για το μέλλον ADR:
- Πιο πολύπλοκη υλοποίηση
- Περιορισμένη υποστήριξη προγράμματος περιήγησης ιστορικά
- Υψηλότερο κόστος χρήστη
- Θα μπορούσε να προστεθεί μαζί με το TOTP αργότερα
# Βασισμένο σε email OTP
Ενότητα με τίτλο «# Βασισμένο σε email OTP»Απορρίφθηκε λόγω:
- Ο συμβιβασμός του λογαριασμού email ακυρώνει τον σκοπό
- Οι καθυστερήσεις παράδοσης επηρεάζουν το UX
- Ζητήματα φίλτρου ανεπιθύμητης αλληλογραφίας
Αναφορές
Ενότητα με τίτλο «Αναφορές»- RFC 6238 - TOTP
- Μορφή κλειδιού Google Authenticator
- ../../02-Core-Concepts/Security/Security-Best-Practices - Οδηγίες ασφαλείας
- ../../02-Core-Concepts/Users-Permissions/Authentication - Τεκμηρίωση συστήματος ελέγχου ταυτότητας