Güvenli bir "şifremi unuttum" (password reset) akışını nasıl tasarlarsınız?
Cevap
Güvenli bir şifre sıfırlama akışı tahmin edilemez, tek kullanımlık, kısa ömürlü bir token'a dayanır ve hesabın var olup olmadığını sızdırmaz.
Akış
- Kullanıcı e-postasını girer. Yanıt her zaman aynıdır: "Bu adres kayıtlıysa bir bağlantı gönderdik." (user enumeration önlenir; yanıt süresi de benzer tutulmalı.)
- Sunucu kriptografik olarak güvenli rastgele bir token üretir, veritabanına token'ın hash'ini ve son kullanma zamanını (ör. 30 dk) yazar.
- E-postaya
https://app.com/reset?token=...bağlantısı gider. - Kullanıcı yeni şifreyi girer; sunucu token'ı hash'leyip eşleştirir, süresini kontrol eder, şifreyi günceller.
- Token silinir/kullanıldı işaretlenir, kullanıcının diğer oturumları ve refresh token'ları iptal edilir, kullanıcıya "şifreniz değişti" bildirimi gider.
import crypto from "node:crypto";
const token = crypto.randomBytes(32).toString("base64url");
const tokenHash = crypto.createHash("sha256").update(token).digest("hex");
await db.passwordReset.create({
data: { userId, tokenHash, expiresAt: new Date(Date.now() + 30 * 60 * 1000) },
});
await sendMail(email, `https://app.com/reset?token=${token}`);Dikkat edilecekler
- Token'ı düz saklamayın: DB sızarsa saldırgan herkesin şifresini sıfırlayabilir.
- Sıfırlama bağlantısında
Hostbaşlığından URL üretmeyin; host header injection ile bağlantı saldırganın alan adına gidebilir. Base URL konfigürasyondan gelmeli. - Endpoint'e rate limit ve CAPTCHA koyun (e-posta bombardımanı, brute force).
- Reset sayfasında
Referrer-Policy: no-referrerkullanın; token üçüncü taraf script'lere referrer ile sızmasın. - Güvenlik sorusu veya e-posta ile yeni şifre göndermek gibi eski yöntemlerden kaçının.
İlgili Web Güvenliği soruları
- CORS nedir? Neden CORS hatası alırız?
- XSS ve CSRF saldırıları nedir, nasıl korunulur?
- Authentication ile authorization arasındaki fark nedir?
- Güvenli cookie ayarları nelerdir? Session hijacking nasıl önlenir?
- Content Security Policy (CSP) nedir ve nasıl yapılandırılır?
- OWASP Top 10 nedir? En önemli maddelerini özetleyin.
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.