Rate Limiting ile Brute-Force Saldırılarını Durdurma
Güvenlik üzerinde çalışırken Rate Limiting ile Brute Force Saldırılarını Durdurma konusunu doğru kavramak hem zaman kazandırır hem de ileride çıkabilecek sorunların önüne geçer. Aşağıda konunun özünü 5 başlık altında topladık.
İçindekiler
Güvenlik üzerinde çalışırken Rate Limiting ile Brute-Force Saldırılarını Durdurma konusunu doğru kavramak hem zaman kazandırır hem de ileride çıkabilecek sorunların önüne geçer. Aşağıda konunun özünü 5 başlık altında topladık.
Temel kavram ve amaç
Giriş, şifre sıfırlama ve SMS/WhatsApp doğrulama sayfaları otomatik denemelerin ilk hedefidir. Hız sınırlaması (rate limiting), aynı IP ya da hesaptan belirli sürede yapılabilecek deneme sayısını kısıtlar. Doğru kurulduğunda gerçek kullanıcıyı rahatsız etmeden saldırıyı anlamsız kılar.
Bilmeniz gereken 5 temel nokta
- İki anahtar: Hem IP hem kullanıcı adı bazında sınırlayın; dağıtık saldırılar farklı IP'ler kullanır.
- 429 durum kodu: Sınır aşıldığında 429 Too Many Requests ve Retry-After başlığı döndürün.
- Artan bekleme: Her başarısız denemede bekleme süresini artırmak otomatik denemeyi çok yavaşlatır.
- Gerçek IP: Cloudflare ya da vekil sunucu arkasındaysanız istemci IP'sini güvenilir başlıktan alın.
- Katmanlı savunma: Uygulama içi sınırlamayı WAF kuralı ve CAPTCHA ile birlikte kullanın.
PHP ile uygulama
Teoriyi somutlaştırmak için kısa bir PHP örneğine bakalım:
function hizSiniri(PDO $pdo, string $anahtar, int $sinir, int $saniye): bool
{
$pdo->prepare('DELETE FROM hiz_kayitlari WHERE zaman < NOW() - INTERVAL ? SECOND')->execute([$saniye]);
$say = $pdo->prepare('SELECT COUNT(*) FROM hiz_kayitlari WHERE anahtar = ?');
$say->execute([$anahtar]);
if ((int)$say->fetchColumn() >= $sinir) return false;
$pdo->prepare('INSERT INTO hiz_kayitlari (anahtar) VALUES (?)')->execute([$anahtar]);
return true;
}
// 15 dakikada en fazla 5 giriş denemesi (IP + kullanıcı adı)
if (!hizSiniri($pdo, 'giris:' . $ip . ':' . strtolower($kullanici), 5, 900)) {
http_response_code(429);
exit('Çok fazla deneme. 15 dakika sonra tekrar deneyin.');
}Örnek bilinçli olarak kısa tutuldu; gerçek projede hata yönetimi ve günlükleme gibi katmanlar eklenmelidir.
Kullanıcıdan gelen veriyi ekrana basarken htmlspecialchars() ile kaçışlamak XSS saldırılarının önüne geçer.
Size ne kazandırır?
Kısaca özetlemek gerekirse:
- Saldırı yüzeyini daraltır ve olası veri sızıntılarının önüne geçer
- Güvenlik denetimlerinden daha kolay geçen bir kod tabanı sağlar
- Hataların canlı ortama çıkmadan fark edilmesine yardım eder
- Kullanıcı güvenini ve marka itibarını korur
Özetle
Bu yazı boyunca Rate Limiting ile Brute-Force Saldırılarını Durdurma konusunun temel taşlarını ve uygulamada dikkat edilmesi gerekenleri gördük. Özellikle İki anahtar ve Katmanlı savunma başlıklarını uygulamaya geçirmek iyi bir başlangıç olur.
İlgili içerikler:
- Google Authenticator ile İki Adımlı Doğrulama (TOTP) Nasıl Çalışır?
- PHP PDO ile SQL Injection Koruması
- PHP ile Güvenli Dosya Yükleme: 8 Kontrol
Daha fazla uygulamalı içerik için Akademi derslerine ve blog yazılarına göz atabilirsiniz.
Yazar
Ferdi Giden @adminPHP, MySQL ve Tailwind ile kurumsal yazılımlar geliştiriyor; FerdiSoft çatısı altında ERP, WMS ve SaaS çözümleri üretiyor.