Ele geçirilen sitelerin çoğunda başlangıç noktası egzotik bir kod açığı değil, başka bir serviste sızmış ve burada da kullanılmış bir paroladır. Bu yazıda ekibinizin gerçekten uygulayabileceği bir parola politikasını ve kimseyi kapı dışında bırakmayan bir 2FA kurulumunu adım adım kuruyoruz.
İyi parola politikası uzun listeyi değil uzun parolayı hedefler
Büyük harf, rakam ve noktalama zorunluluğu insanları öngörülebilir kalıplara iter: Ankara2024! gibi. Parolanın gücünü belirleyen esas etken uzunluktur. NIST'in kimlik doğrulama kılavuzu (SP 800-63B) da bu yönde: uzunluğu öne çıkarır, zorunlu periyodik değişimi önermez. Sitenizde şu kuralları uygulayın:
- En az 12 karakter zorunlu olsun, 16 karakteri teşvik edin. Boşluğa izin verin ki kullanıcı "kırmızı bisiklet mor kapı" gibi bir cümle kurabilsin.
- Karmaşıklık zorunluluğunu kaldırın ya da hafifletin; onun yerine yasak liste tutun: site adı, marka adı, kullanıcının e-posta öneki, 123456, qwerty, sifre gibi klasikler reddedilsin. Birkaç yüz satırlık bir liste bile ilk elemeyi yapar.
- Belirli aralıklarla zorunlu parola değişimi istemeyin. Bu kural pratikte parolanın sonuna artan bir sayı eklenmesine yol açar. Değişimi yalnızca sızıntı şüphesi varsa zorunlu kılın.
- Parola alanına "göster" düğmesi ekleyin; yazım hatası korkusuyla kısa parola seçilmesini azaltır.
- Ekip için bir parola yöneticisi kullanın. Ortak hesap yerine kişiye özel hesap açın; kişiye özel hesabın mümkün olmadığı yerlerde parolayı yöneticinin paylaşım özelliğiyle verin, WhatsApp'tan değil.
Parolayı doğru saklamak
Politikadan daha önemlisi, parolanın veritabanında nasıl durduğudur. PHP tarafında doğrusu modern bir hash fonksiyonunu varsayılan ayarlarıyla kullanmaktır; bcrypt ya da Argon2id uygundur, MD5 ve SHA1 kesinlikle uygun değildir. Üç ek kural:
- Kullanıcı her giriş yaptığında hash'in güncel maliyet ayarına uygun olup olmadığını kontrol edin, değilse o anda sessizce yeniden hash'leyin.
- Parolayı hiçbir koşulda e-postayla göndermeyin; kayıtlara, hata mesajlarına ve destek taleplerine yazmayın.
- Sıfırlama bağlantısındaki tokenı tek kullanımlık yapın, 30-60 dakikada süresi dolsun ve veritabanında düz metin değil hash'lenmiş halde dursun.
Sıfırlama ekranı, e-posta kayıtlı değilse farklı bir mesaj veriyorsa saldırgana müşteri listenizi doğrulama imkânı vermiş olursunuz. Kayıtlı olsun olmasın aynı nötr mesajı gösterin.
2FA: hangi yöntem kime uygun?
İkinci adım, parola sızsa bile girişi durdurur. Ama her yöntem aynı korumayı vermez.
| Yöntem | Güvenlik | Maliyet | Kime uygun |
|---|---|---|---|
| E-posta kodu | Düşük; e-posta hesabı ele geçmişse işe yaramaz | Yok | Müşteri hesapları için asgari seviye |
| SMS kodu | Orta; hat taşıma ve yönlendirme riski var | Mesaj başına ücret | Telefonu olan ama uygulama kurmayan kitle |
| TOTP uygulaması | Yüksek; internet bağlantısı bile gerekmez | Yok | Yöneticiler ve tüm ekip için varsayılan |
| Donanım anahtarı | Çok yüksek; oltalamaya dirençli | Cihaz başına tek seferlik | Ödeme ve sunucu erişimi olan kişiler |
KOBİ ölçeğinde makul denge şudur: yönetici panelinde TOTP zorunlu, müşteri hesaplarında isteğe bağlı ama görünür biçimde teşvik edilen 2FA. Donanım anahtarını yalnızca ödeme sağlayıcısına ve sunucuya erişen iki üç kişi için düşünün.
TOTP'yi adım adım kurmak
- Gizli anahtar üretin. Kullanıcı başına rastgele bir anahtar oluşturun ve veritabanında şifreli saklayın. Aynı anahtarı iki kullanıcıya vermeyin.
- QR kodu gösterin. Standart otpauth adresini üretip QR olarak çizin, altına anahtarı elle girilebilecek biçimde de yazın; bazı kullanıcılar kamerayı kullanamaz.
- Aktifleştirmeden önce doğrulatın. Kullanıcı uygulamadaki ilk kodu doğru girmeden 2FA'yı açmayın. Bu adım atlanırsa yanlış kurulum yapan kullanıcı bir sonraki girişte kilitlenir.
- Zaman toleransı bırakın. Sunucu saatiyle telefon saati birkaç saniye kayabilir; bir önceki ve bir sonraki 30 saniyelik pencereyi kabul edin, toleransı daha geniş tutmayın.
- Kullanılmış kodu tekrar kabul etmeyin. Doğrulanan kodu kullanıcıya bağlı olarak kaydedin; aynı kod ikinci kez gelirse reddedin.
- Yedek kod üretin. Sekiz ile on adet tek kullanımlık kod verin, ekranda bir kez gösterin, veritabanında hash'lenmiş tutun. Kullanılanı işaretleyin, ikiden az kaldığında kullanıcıyı uyarın.
- Deneme sayısını sınırlayın. Altı haneli kod, sınırsız deneme hakkı verilirse zayıftır. Beş yanlış denemeden sonra hesabı 15 dakika kilitleyin ve olayı kayda yazın.
- Güvenilen cihaz seçeneği sunun. 30 güne kadar hatırlama, kullanıcıyı 2FA'dan soğutmadan güvenliği korur. Parola değişiminde hatırlanan bütün cihazları düşürün.
Kilitlenmeyi önleyen kurallar
- Sistemde en az iki tam yetkili yönetici bulunsun ve ikisinde de 2FA kurulu olsun.
- Son yetkili yöneticinin kendi 2FA'sını kapatmasına ya da hesabını silmesine izin vermeyin.
- Telefonunu kaybeden kullanıcı için yazılı bir kurtarma prosedürü olsun: kimlik doğrulaması yapılmadan sıfırlama yapılmasın, yapılan her sıfırlama denetim kaydına yazılsın.
- Yedek kodların çıktısını alıp fiziksel olarak saklayan bir kişi olsun; kasada duran bir kâğıt, kaybolmuş bir telefondan daha güvenilirdir.
Sık yapılan hatalar
- 2FA'yı sadece kendi hesabında açıp ekibin geri kalanını serbest bırakmak. Zincir en zayıf halkadan kopar.
- SMS'i tek yöntem olarak sunmak ve TOTP seçeneğini hiç eklememek.
- Yedek kodları düz metin saklamak; veritabanı sızdığında 2FA anlamsızlaşır.
- Doğrulama adımını oturuma "tamamlandı" diye yazıp sonraki isteklerde bu bayrağı hiç kontrol etmemek.
- Parola sıfırlama akışında 2FA adımını atlamak. Sıfırlama, 2FA'yı devre dışı bırakan bir arka kapı olmamalıdır.
- Yönetici girişini yalnızca IP kısıtıyla korumak; dinamik IP kullanan bir işletmede bu kural birkaç haftada kaldırılır.
Kontrol listesi: bu hafta yapabilecekleriniz
- Minimum parola uzunluğunu 12 karaktere çekin ve yasak parola listesini devreye alın.
- Hash'i bcrypt ya da Argon2id'e taşıyın; girişte eski hash'leri sessizce yenileyin.
- Yönetici hesapları için TOTP'yi zorunlu hale getirin, ilk kod doğrulanmadan aktifleştirmeyin.
- Yedek kodları üretip hash'leyerek saklayın, kullanıcıya bir kez gösterin.
- Başarısız giriş ve kod denemelerine hız sınırı koyup (5 deneme, 15 dakika) denetim kaydına yazın.
- İki tam yetkili yönetici kuralını uygulayın ve son yöneticinin kendini kilitlemesini engelleyin.
- Sıfırlama tokenını tek kullanımlık, kısa ömürlü ve hash'li hale getirin.
