PHP Brute Force Engelleme

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.

Web sitesine mi ihtiyacınız var ?

Kategori: