Buğra Şıkel
PHP ile Brute Force (Kaba Kuvvet) Saldırısına Karşı Önlem Alma

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

API Gateway ve Load Balancer Arasında TCP Port Exhaustion Çözümleri
Yüksek trafikli sistemlerde TIME_WAIT durumundaki soketlerin yönetimi ve port exhaustion (port tükenmesi) sorununu gidermek için gereken kritik kernel ve konfigürasyon ayarlarını öğrenin.
Devamını Oku

Mevcut C++ Görüntü İşleme Pipeline’larına Python AI Modellerini Sıfır Kopyalama ile Entegre Etmek
Bu blog yazısı, mevcut yüksek performanslı C++ görüntü işleme boru hatlarına Python tabanlı yapay zeka modellerini entegre etmek için sıfır kopyalama yaklaşımlarını inceler. Veri kopyalama maliyetlerini ortadan kaldırarak performansı artırma ve bellek kullanımını optimize etme yöntemlerini detaylandırır.
Devamını Oku

Flutter ve CRDT ile Sıfırdan Offline-First Senkronizasyon Motoru İnşası
Mobil uygulamalarda veri kaybını sıfıra indiren offline-first mimarisi. Hybrid Logical Clock (HLC), SQLite ve CRDT kullanarak deterministik çakışma yönetimi.
Devamını Oku