Parolalar veritabanında nasıl saklanmalıdır? bcrypt ve Argon2 neden tercih edilir?
Cevap
Parolalar asla düz metin veya geri çözülebilir şifreleme ile saklanmaz. Tek yönlü, yavaş ve salt'lı bir hash fonksiyonu kullanılır.
Neden MD5 / SHA-256 yetmez?
Bu fonksiyonlar hız için tasarlanmıştır. Bir GPU saniyede milyarlarca SHA-256 hesaplayabilir; sızan bir veritabanında kaba kuvvet ve sözlük saldırısı çok hızlı olur.
Doğru yaklaşım
- Salt: her kullanıcıya özel rastgele değer. Aynı parolalar farklı hash üretir, rainbow table işe yaramaz. bcrypt ve Argon2 salt'ı hash'in içinde saklar.
- Maliyet (work factor): hash'i kasıtlı olarak yavaşlatır (ör. ~100–300 ms). Donanım geliştikçe artırılabilir.
- Argon2id: güncel öneri; CPU yanında bellek maliyeti de olduğundan GPU/ASIC saldırılarına daha dayanıklı. bcrypt hâlâ güvenli ve yaygın.
import bcrypt from "bcrypt";
const hash = await bcrypt.hash(password, 12); // cost = 12
// kayıt: users.password_hash = hash
const ok = await bcrypt.compare(girilenParola, user.password_hash);Ek noktalar
- Karşılaştırma kütüphanenin
comparefonksiyonuyla yapılır (sabit zamanlı). - İsteğe bağlı pepper: uygulama sırrı olarak ayrı saklanan ek gizli değer.
- Giriş denemelerine rate limit ve hesap kilitleme eklenir.
- bcrypt girdiyi 72 byte ile sınırlar; çok uzun parolalarda bu bilinmelidir.
İ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.