

PHP ile kullanıcılarımızın oturum açmalarını içeren sistemler kuruyoruz. Bu sistemlerde alabileceğimiz saldırılardan en yaygın olanlardan birisi Brute Force yani kaba kuvvet saldırısıdır.
Brute Force saldırısı, bir kullanıcının bir hesabın parolasını tahmin etmek için sistematik olarak bütün olası parola seçeneklerini denemeye dayalı bir saldırı türüdür. Bu saldırılar, genellikle bir hesabın güvenlik doğrulamasını zayıflatmak veya bir sistemi zararlı bir şekilde kullanmak amacıyla gerçekleştirilir.
Bu tür bir saldırıya karşı korunmak için, birkaç farklı yöntem kullanılabilir. Öncelikle, kullanıcıların parolalarını güçlendirmeleri önemlidir. Bu, parolaların karakterlerinin bir kombinasyonunu içermesi anlamına gelir. Parolalar, rakamlar, harfler ve özel karakterleri içermeli ve uzunlukları en az 8 karakter olmalıdır. Ayrıca, kullanıcıların parolalarını sık sık değiştirmeleri de önemlidir, böylece bir hesap ele geçirilirse bile, parola zamanla değişecektir ve saldırıcıların parolayı kıracak zamanı olmayacaktır.
Bir diğer önemli yöntem ise, sınırlı deneme seçeneğini kullanmaktır. Bu, bir kullanıcının bir hesabın parolasını yanlış girdiğinde sistem tarafından yapılan hatalı giriş denemelerini sınırlamak anlamına gelir. Örneğin, bir hesabın parolasını yanlış girdiğinde, sistem birkaç deneme hakkı verilebilir ve daha fazla yanlış giriş denemesi yapılmaya çalışıldığında hesap geçici olarak kilitlenebilir. Bu, saldırıcıların sistematik olarak bir hesabın parolasını denemesi durumunda, saldırının zaman aşımına uğramasını sağlar.
Bu yazımızda biz de sınırlı deneme sistemini kullanmayı göstereceğiz.
Öncelikle login işlemlerinde hatalı girişlerde etkin olacak bir fonksiyon yazıyoruz.
Fonksiyonumuz:
function login_attempt() {
// Eğer login_attempt session'ı zaten oluşturulmuşsa, değerini 1 artır
if (isset($_SESSION['login_attempt'])) {
$_SESSION['login_attempt']++;
}
// Eğer login_attempt session'ı henüz oluşturulmamışsa, değerini 1 yap
else {
$_SESSION['login_attempt'] = 1;
}
// Eğer login_attempt session'ının değeri 3'e ulaştıysa
if ($_SESSION['login_attempt'] >= 3) {
$_SESSION['login_failed'] = time();
}
}
Şimdi gelelim login formumuzun gittiği yer olan php dosyamızın içerisine.
Login.php
// post işlemi geldikten sonraki kodun başlangıç noktasına aşağıdaki kodu ekliyoruz.
if (isset($_SESSION['login_failed'])) {
$difference = time() - $_SESSION['login_failed'];
if ($difference < 180){
$remain = 180-$difference;
echo 'Çok fazla yanlış deneme yaptınız '.$remain.' saniye sonra tekrar deneyin';
return;
}else {
unset($_SESSION['login_failed']);
unset($_SESSION['login_attempt']);
}
}
// burada normal kullanıcı adı, şifre kontrollerimizi yapıyoruz.
// eğer kullanıcımız yanlış denemede bulunursa yukarıdaki fonksiyonumuzu çağırıyoruz
login_attempt();
Sonuç olarak 3 yanlış deneme yaptıktan sonra kullanıcının yeni bir şifre denemesini 180 saniye boyunca engellemiş olduk. Engellemek istediğiniz süreyi daha da arttırabilir ya da azaltabilirsiniz. Sizin kullanıcılarınıza yönelik karar vermeniz gereken bir konu. İsterseniz Her 3 yanlış denemeyi de bir session ile tutabilir ve her 3 yanlış denemeden sonra beklenecek süreyi katlayarak çoğaltabilirsiniz.
Bu ve benzeri önemli ipuçlarını öğrenmek için diğer yazılarıma da göz atabilirsiniz.
Bunları da beğenebilirsiniz

Autoencoder vs. CNN: Görüntü Tabanlı Anomali Tespitinde Hangisi?
Endüstriyel otomasyon, kalite kontrol ve güvenlik sistemleri gibi birçok alanda görüntü tabanlı anomali tespiti kritik bir rol oynamaktadır. Ancak bu karmaşık problemi bir web uygulamasına…

PHP ile Döngüler (for, foreach, while, do..while)
PHP’de döngüler, belli bir kod bloğunun belli bir koşul sağlandığı sürece tekrar edilmesini sağlar. PHP’de döngüleri yönetmek için for, foreach, while, do…while gibi farklı döngü…

PHP CSRF Token Oluşturma CSRF Açığına Karşı Güvenlik Fonksiyonları
CSRF ya da XSRF Saldırısı Nedir? XSRF ya da CSRF (İngilizce: cross-site request forgery, Türkçe: sitelerarası istek sahtekârlığı), internet sitelerini hedef alan kötü niyetli bir exploit türüdür. XSRF ile internet sitesinin güvendiği bir…