PHP ile DDoS ve Brute Force Saldırılarına Karşı Korunma

PHP ile DDoS ve Brute Force Saldırılarına Karşı Korunma

Web uygulamaları, kötü niyetli saldırılara karşı korunmadığında DDoS (Distributed Denial of Service) ve Brute Force saldırıları gibi risklere açık hale gelir. PHP ile DDoS saldırılarından korunmak için rate limiting, reCAPTCHA ve Cloudflare gibi yöntemler kullanılmalıdır. Brute Force saldırılarına karşı şifre politikaları, başarısız giriş denetimi ve IP bloklama mekanizmaları uygulanmalıdır. Bu güvenlik önlemleri sayesinde web uygulamalarınızı kötü niyetli saldırılara karşı koruyabilirsiniz.


1. DDoS ve Brute Force Saldırıları Nedir?

1.1. DDoS (Distributed Denial of Service) Saldırısı

DDoS saldırıları, çok sayıda sahte istek göndererek sunucunun kaynaklarını tüketmeyi ve hizmetleri çökertmeyi amaçlar.

Amaç:
✅ Sunucunun çökmesini sağlamak.
✅ Kullanıcıların hizmete erişmesini engellemek.
✅ Bant genişliğini aşırı tüketerek yavaşlamaya neden olmak.

1.2. Brute Force Saldırısı

Brute Force saldırıları, bir kullanıcının şifresini tahmin etmek için otomatik deneme-yanılma yöntemini kullanır.

Amaç:
✅ Kullanıcı hesaplarına yetkisiz erişim sağlamak.
✅ Yönetici paneline giriş yapmak.
✅ API anahtarlarını ele geçirmek.


2. PHP ile DDoS Saldırılarından Korunma

DDoS saldırılarına karşı önlem almak için aşağıdaki güvenlik mekanizmaları uygulanmalıdır.

2.1. IP Tabanlı Rate Limiting (Hız Sınırlama)

Belirli bir süre içinde bir IP adresinden yapılan istek sayısını sınırlamak, DDoS saldırılarını hafifletir.

session_start();
$ip = $_SERVER['REMOTE_ADDR'];
$time_limit = 60; // 60 saniye içinde maksimum istek
$max_requests = 100;

if (!isset($_SESSION['request_count'][$ip])) {
    $_SESSION['request_count'][$ip] = ['count' => 1, 'start_time' => time()];
} else {
    $_SESSION['request_count'][$ip]['count']++;
    if ($_SESSION['request_count'][$ip]['count'] > $max_requests && (time() - $_SESSION['request_count'][$ip]['start_time']) < $time_limit) {
        http_response_code(429);
        die(json_encode(["error" => "Çok fazla istek, lütfen daha sonra tekrar deneyin."]));
    }
}

Bu yöntem, 1 dakika içinde 100’den fazla istek yapan IP adreslerini engeller.


2.2. ReCAPTCHA Kullanımı

reCAPTCHA, botların ve otomatik saldırıların sitenizi kötüye kullanmasını önler.

<form action="login.php" method="POST">
    <div class="g-recaptcha" data-sitekey="your-site-key"></div>
    <button type="submit">Giriş Yap</button>
</form>

Sunucu tarafında doğrulama:

$recaptcha_secret = "your-secret-key";
$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=$recaptcha_secret&response=" . $_POST['g-recaptcha-response']);
$result = json_decode($response);
if (!$result->success) {
    die("reCAPTCHA doğrulaması başarısız.");
}

Bu yöntem, botların ve otomatik saldırıların giriş yapmasını engeller.


2.3. Cloudflare veya WAF Kullanımı

Cloudflare gibi Web Uygulama Güvenlik Duvarı (WAF) çözümleri, DDoS saldırılarını otomatik olarak filtreler ve engeller.


3. PHP ile Brute Force Saldırılarından Korunma

Brute Force saldırılarına karşı kullanıcı girişlerini korumak için aşağıdaki önlemler alınmalıdır.

3.1. Başarısız Giriş Denemelerini Sınırlama

Belirli bir IP adresinden yapılan başarısız giriş denemelerini takip ederek erişimi engelleyebiliriz.

session_start();
$ip = $_SERVER['REMOTE_ADDR'];
$max_attempts = 5;
$lockout_time = 900; // 15 dakika

if (!isset($_SESSION['login_attempts'][$ip])) {
    $_SESSION['login_attempts'][$ip] = ['count' => 0, 'last_attempt' => time()];
}

if ($_SESSION['login_attempts'][$ip]['count'] >= $max_attempts && (time() - $_SESSION['login_attempts'][$ip]['last_attempt']) < $lockout_time) {
    die("Çok fazla başarısız giriş denemesi. Lütfen 15 dakika sonra tekrar deneyin.");
}

if (isset($_POST['password'])) {
    $password = $_POST['password'];
    $stored_password_hash = '$2y$10$hash'; // Örnek şifre hash'i
    
    if (password_verify($password, $stored_password_hash)) {
        $_SESSION['login_attempts'][$ip]['count'] = 0; // Başarılı girişte sıfırla
        echo "Giriş başarılı";
    } else {
        $_SESSION['login_attempts'][$ip]['count']++;
        $_SESSION['login_attempts'][$ip]['last_attempt'] = time();
        die("Yanlış şifre!");
    }
}

Bu kod, 5 başarısız giriş denemesinden sonra kullanıcıyı 15 dakika boyunca engeller.


3.2. Kullanıcı Şifrelerini Güçlü Hale Getirme

Zayıf parolalar, brute force saldırılarına karşı savunmasızdır. Kullanıcı şifrelerini şu yöntemlerle güçlendirin:

Şifre Politikası:

if (!preg_match("/^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*[!@#$%^&*]).{8,}$/", $_POST['password'])) {
    die("Şifre en az 8 karakter, bir büyük harf, bir küçük harf, bir rakam ve bir özel karakter içermelidir.");
}

Bu kod, şifrelerin en az 8 karakter uzunluğunda ve karmaşık olmasını sağlar.


4. Güvenlik Testleri

DDoS Testi: Sunucuya yoğun istek göndererek hız sınırlandırmasının çalışıp çalışmadığını test edin.
Brute Force Testi: Aynı hesaba farklı şifrelerle giriş yapmayı deneyerek engellemenin devreye girip girmediğini kontrol edin.
Şifre Politikası Testi: Zayıf şifreleri kabul edip etmediğini test edin.
reCAPTCHA Testi: Botların otomatik giriş yapmaya çalışıp çalışmadığını kontrol edin.