
Sitenize üyelik sistemi ekliyorsunuz. Şifreleri veritabanına yazıyorsunuz, giriş çalışıyor, iş bitti gibi görünüyor. Ancak şifre saklamanın doğru yolu, çoğu kurulumda uygulanmıyor.
Bu yazı, kullanıcı kimlik doğrulamasının temel gerekliliklerini ele alıyor.
Şifre Nasıl Saklanmalı?
Şifre saklamanın tek doğru yolu vardır ve alternatifleri yanlıştır:
| Yöntem | Durumu |
|---|---|
| Düz metin | Kabul edilemez |
| Basit özet fonksiyonu | Kırılabilir |
| Tuzlu basit özet | Yetersiz |
| Şifreleme | Yanlış yaklaşım — geri açılabilir |
| Modern şifre özet algoritması | Doğru |
Dördüncü satır kavramsal bir hatadır: şifreler şifrelenmez, özetlenir — çünkü şifrelenmiş bir veri geri açılabilir ve anahtarı ele geçiren herkes tüm şifreleri okuyabilir.
Doğru yaklaşımda şifre geri getirilemez. Doğrulama, girilen şifrenin özetini hesaplayıp saklanan özetle karşılaştırarak yapılır.
İkinci ve üçüncü satırların sorunu hızlarıdır. Genel amaçlı özet fonksiyonları hızlı olacak şekilde tasarlanmıştır — ve bu, saldırganın saniyede milyarlarca deneme yapabilmesi demektir.
Yavaşlığın Değeri
Şifre algoritmalarının bilerek yavaş olması bir özelliktir:
- Hesaplama maliyeti ayarlanabilir.
- Donanım güçlendikçe maliyet artırılır.
- Tek doğrulama için maliyet önemsizdir.
- Milyonlarca deneme için engelleyicidir.
Üçüncü ve dördüncü maddelerin birlikteliği tüm mantığı açıklar: tek bir girişte fark edilmeyen kısa bir gecikme, kaba kuvvet denemesi yapan biri için milyonlarca kat maliyete dönüşür.
Bu yüzden maliyet parametresi, sunucunuzun kaldırabileceği en yüksek makul değere ayarlanmalıdır. Genel öneri, tek bir doğrulamanın gözle fark edilmeyecek ama ölçülebilir bir süre almasıdır.
Otomatik Tuz
Modern şifre fonksiyonları tuzu kendileri üretir:
- Her şifre için rastgele bir tuz oluşturulur
- Tuz, özetin içine gömülür
- Ayrı bir sütunda saklanması gerekmez
- Doğrulama sırasında otomatik okunur
Bu, eski yöntemlere göre önemli bir sadeleşmedir: tuzu kendiniz üretip ayrı sütunda saklamanız gerekmez — bunu yapmaya çalışmak genellikle hataya yol açar.
Tuzun amacı, aynı şifreye sahip iki kullanıcının farklı özetlere sahip olmasını sağlamaktır. Böylece önceden hesaplanmış tablolarla toplu kırma mümkün olmaz.
Doğrulama Kuralları
Giriş işleminde dikkat edilecekler:
| Kural | Neden |
|---|---|
| Özel karşılaştırma fonksiyonu kullanın | Zamanlama saldırısını önler |
| Hata mesajı belirsiz olsun | Hesap keşfini engeller |
| Kullanıcı yoksa da süre harcayın | Süre farkı bilgi verir |
| Deneme sayısını sınırlayın | Kaba kuvvet |
| Başarılı girişte oturumu yenileyin | Oturum sabitleme |
Üçüncü satır ince ama gerçek bir sızıntıyı kapatır: var olmayan bir kullanıcı için hemen hata dönerken, var olan kullanıcı için şifre kontrolü süresi harcanırsa, yanıt süresi farkı hesabın varlığını ele verir.
Çözüm, kullanıcı bulunamadığında da sahte bir doğrulama yapmak veya benzer bir gecikme uygulamaktır.
Şifre Politikası
Kullanıcıdan ne isteneceği de bir karardır:
- Uzunluk en önemli faktördür.
- Karmaşıklık zorunluluğu abartılmamalıdır.
- Bilinen sızmış şifreler engellenmelidir.
- Periyodik zorunlu değişiklik gereksizdir.
- Şifre yöneticisi kullanımı engellenmemelidir.
İkinci ve dördüncü maddeler eski alışkanlıkları düzeltir: karmaşık karakter zorunlulukları ve periyodik değiştirme, kullanıcıları tahmin edilebilir desenlere iter — sonuna bir rakam ekleyip artırmak gibi.
Güncel yaklaşım uzunluğa odaklanır ve sızmış şifre listelerini kontrol eder. Uzun ama basit bir parola cümlesi, kısa ve karmaşık bir şifreden güçlüdür.
Beşinci madde sıkça ihlal edilir. Yapıştırmayı engelleyen bir şifre alanı, şifre yöneticisi kullanımını zorlaştırır ve kullanıcıları daha zayıf şifrelere iter.
Şifre Sıfırlama
Sıfırlama akışı, sistemin en zayıf halkası olabilir:
- Rastgele ve tahmin edilemez bir belirteç üretin.
- Belirteci veritabanında özetlenmiş olarak saklayın.
- Kısa bir süre sonu tanımlayın.
- Tek kullanımlık olsun.
- Kullanıldıktan sonra silin.
- Diğer oturumları sonlandırın.
İkinci madde çoğu kurulumda atlanır: sıfırlama belirteci veritabanında düz olarak saklanıyorsa, veritabanına erişen biri tüm hesapların şifresini sıfırlayabilir.
Belirteç de bir şifre gibi ele alınmalı ve özetlenerek saklanmalıdır.
Altıncı madde ise güvenlik açısından önemlidir. Şifre sıfırlandığında, hesabı ele geçirmiş olabilecek kişinin açık oturumu da kapatılmalıdır.
Sıfırlama E-postası
Bu e-postanın kendisi de dikkat gerektirir:
| Kural | Neden |
|---|---|
| Hesap yoksa da aynı mesajı gösterin | Hesap keşfi engellenir |
| Süre sonunu belirtin | Kullanıcı bilir |
| İstemediyse ne yapması gerektiğini yazın | Şüpheli durum uyarısı |
| Sıfırlama sonrası bilgilendirme gönderin | Yetkisiz değişiklik fark edilir |
Dördüncü satır bir erken uyarı mekanizmasıdır: şifresi değiştirilen kullanıcıya bilgilendirme göndermek, hesabı ele geçirilen kişinin durumu hemen fark etmesini sağlar.
Bu ileti, işlemi kendisinin yapmadığı durumda ne yapması gerektiğini de içermelidir.
Ek Doğrulama Katmanı
Şifre tek başına yeterli sayılmamalıdır:
- İki adımlı doğrulama sunun. En azından isteğe bağlı.
- Yeni cihazdan girişte bildirim gönderin.
- Şüpheli konumda ek doğrulama isteyin.
- Yönetici hesaplarında zorunlu kılın.
Dördüncü madde en yüksek getirili önlemdir: yönetici hesabının ele geçirilmesi, tüm sitenin ele geçirilmesi demektir — bu hesaplarda ek doğrulama pazarlık konusu olmamalıdır.
Normal kullanıcılar için isteğe bağlı sunmak yeterlidir; zorunlu kılmak kayıt oranını düşürebilir.
Hosting Tarafında Dikkat
Paylaşımlı ortamda ek noktalar:
- Veritabanı bağlantı bilgileri web kökü dışında olsun.
- Hata mesajları kullanıcıya gösterilmesin.
- Oturum dizini korunsun.
- Şifre algoritması sunucuda destekleniyor mu doğrulayın.
Dördüncü madde eski PHP sürümlerinde sorun çıkarır: modern şifre algoritmaları belirli PHP sürümlerinden itibaren gelir ve eski bir sunucuda mevcut olmayabilir.
Bu durumda uygulama sessizce daha zayıf bir yönteme düşebilir. Kurulum sırasında hangi algoritmanın kullanıldığını doğrulamak gerekir.
Hangi PHP sürümlerinin sunulduğu ve nasıl seçildiği hosting paketleri arasında değişir; güncel bir sürüm seçmek bu sorunu baştan çözer.
Sonuç
Şifre güvenliğinde ilk düzeltilecek kavram şudur: şifreler şifrelenmez, özetlenir — şifrelenmiş veri geri açılabilir ve anahtarı ele geçiren herkes tüm şifreleri okur. Modern şifre algoritmaları bilerek yavaştır ve tuzu kendileri üretir. Politika tarafında ise eski alışkanlıkları bırakın: karmaşıklık zorunlulukları ve periyodik değiştirme, kullanıcıları tahmin edilebilir desenlere iter. Ve sıfırlama belirtecini de bir şifre gibi özetleyerek saklayın.
Sıkça Sorulan Sorular (SSS)
Şifreleri şifrelesem olmaz mı?
Olmaz — bu kavramsal bir hatadır. Şifrelenmiş veri geri açılabilir, yani anahtarı ele geçiren herkes tüm kullanıcı şifrelerini okuyabilir. Şifreler özetlenmeli ve geri getirilemez olmalıdır; doğrulama, girilen şifrenin özeti karşılaştırılarak yapılır.
Şifre algoritması neden yavaş olmalı?
Çünkü tek bir girişte fark edilmeyen kısa bir gecikme, kaba kuvvet denemesi yapan biri için milyonlarca kat maliyete dönüşür. Genel amaçlı özet fonksiyonları hızlı olacak şekilde tasarlanmıştır ve bu, saniyede milyarlarca deneme anlamına gelir.
Şifre karmaşıklık kuralı koymalı mıyım?
Abartmayın. Karmaşık karakter zorunlulukları ve periyodik değiştirme, kullanıcıları tahmin edilebilir desenlere iter. Uzunluğa odaklanın ve bilinen sızmış şifreleri engelleyin — uzun ama basit bir parola cümlesi, kısa ve karmaşık bir şifreden güçlüdür.
Şifre sıfırlamada en sık yapılan hata ne?
Sıfırlama belirtecini veritabanında düz olarak saklamak. Bu durumda veritabanına erişen biri tüm hesapların şifresini sıfırlayabilir. Belirteç de bir şifre gibi ele alınmalı, özetlenerek saklanmalı ve tek kullanımlık olmalıdır.