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ış

  1. 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ı.)
  2. Sunucu kriptografik olarak güvenli rastgele bir token üretir, veritabanına token'ın hash'ini ve son kullanma zamanını (ör. 30 dk) yazar.
  3. E-postaya https://app.com/reset?token=... bağlantısı gider.
  4. Kullanıcı yeni şifreyi girer; sunucu token'ı hash'leyip eşleştirir, süresini kontrol eder, şifreyi günceller.
  5. 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 Host baş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-referrer kullanı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.
  1. CORS nedir? Neden CORS hatası alırız?OrtaWeb GüvenliğiFull Stack
  2. XSS ve CSRF saldırıları nedir, nasıl korunulur?ZorWeb GüvenliğiFull Stack
  3. Authentication ile authorization arasındaki fark nedir?KolayWeb GüvenliğiFull Stack
  4. Güvenli cookie ayarları nelerdir? Session hijacking nasıl önlenir?OrtaWeb GüvenliğiFull Stack
  5. Content Security Policy (CSP) nedir ve nasıl yapılandırılır?ZorWeb GüvenliğiFull Stack
  6. OWASP Top 10 nedir? En önemli maddelerini özetleyin.OrtaWeb GüvenliğiFull Stack

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle