Node.js'te OTP Doğrulaması: 2FA ve Email Raporları İçin Güvenli Akış
İki faktörlü kimlik doğrulama (2FA) sırasında OTP kodunu doğrulamak, sadece kod karşılaştırmaktan ibaret değil. Node.js uygulamalarında bu işlemi güvenli hale getirmek için birkaç önemli adım gerekiyor.
Öncelikle OTP kodunun ömrü kısa olmalı, genellikle 30 saniye ile 5 dakika arası. Kod bir kez kullanılırsa, tekrar kullanılamaz. Ayrıca belirli bir hesap ve oturum açma işlemiyle sınırlandırılmalı. Kodun hash'ini veritabanında sakla; asla düz metin olarak tutma. Doğrulama sırasında kullanıcının gönderdiği kodu hash'le ve sabit zamanlı bir karşılaştırma fonksiyonu kullan. Bu, timing saldırılarını engeller.
temel bir örnek:
1const crypto = require('crypto');2const timingSafeEqual = require('crypto').timingSafeEqual;34async function verifyOTP(userId, submittedCode, storedHash) {5const submittedHash = crypto.createHash('sha256').update(submittedCode).digest();67try {8timingSafeEqual(submittedHash, storedHash);9return true;10} catch (err) {11return false;12}13}Doğrulama başarılı olursa kodu hemen tüket, veritabanından sil veya "kullanıldı" olarak işaretle. Bu, aynı kodun yeniden kullanılmasını engeller. Hızlı doğrulama denemelerini de sınırla: beş başarısız deneme sonrası birkaç dakika bekleme süresi ekle.
Burada kritik bir nokta var: OTP doğrulaması, sadece hesap sahibinin o faktöre eriştiğini kanıtlar. Raporlar gibi hassas işlemleri hemen başlatma. Önce 2FA'yı doğrula, sonra ayrı bir yetkilendirilmiş iş (job) oluştur. Bu iş, raporu oluşturur ve e-postaya ekler. Doğrulama başarısı, sonraki tüm işlemleri sınırsız şekilde yetkilendirmez.
Özet: kısa ömürlü, tek kullanımlık, sabit zamanlı karşılaştırma, atomik tüketim, hızlı doğrulama sınırı ve ayrılmış yetkilendirme akışı. Bu kombinasyon, 2FA'yı saldırılara karşı sağlam hale getirir. Basit ama etkili bir durum makinesi gibi düşün, bir kodu kabul et, doğrula, tüket, kayıt et, devam et.
0 yorum