Turkcell | Geleceği Yazanlar

Sunucu gelen saldırı isteklerini engellemiyor

Cyberpanel kullanıyorum.Rest API kurulu sunucuda.Bazi kullanıcılar PHP dosyalarını while döngüsüne falan sokuyorlar sanırım.Aynı ipden bir anda yüzlerce istek geliyor.Sunucu hiçbir şey yapmıyor.Boyle bir şeyle karşılaşan oldu mu?

    +1

    Kerim ÇETİNBAŞ

    Miwa Turkey - 08 Ağustos 2019

    apiye ayni sunucudan baglaniyorsan, cors engelleyebilirsin, 
    değilsede söyle birşey deneyebilirsin​
    API yi ne ile yazdin bilmiyorum ama kendine göre uyarlıyabilirsin


     

    edit: yabanci biri yazmiş tam senin istedigin sey, sesion tutmadan cors isteklerini süzüyor :)

     

    function ht_request_limiter() {
        if (!isset($_SERVER['REMOTE_ADDR'])) { return; } // Maybe its impossible, however we check it first
        if (empty($_SERVER['REMOTE_ADDR'])) { return; } // Maybe its impossible, however we check it first
        $path = '/your/path/ipsec/'; // I use a function to validate a path first and return if false...
        $path = $path.$_SERVER['REMOTE_ADDR'].'.txt'; // Real file path (filename = <ip>.txt)
        $now = time(); // Current timestamp
        if (!file_exists($path)) { // If first request or new request after 1 hour / 24 hour ban, new file with <timestamp>|<counter>
            if ($handle = fopen($path, 'w+')) {
                if (fwrite($handle, $now.'|0')) { chmod($path, 0700); } // Chmod to prevent access via web
                fclose($handle);
            }
        }
        else if (($content = file_get_contents($path)) !== false) { // Load existing file
            $content = explode('|',$content); // Create paraset [0] -> timestamp  [1] -> counter
            $diff = (int)$now-(int)$content[0]; // Time difference in seconds from first request to now
            if ($content[1] == 'ban') { // If [1] = ban we check if it was less than 24 hours and die if so
                if ($diff>86400) { unlink($path); } // 24 hours in seconds.. if more delete ip file
                else {
                    header("HTTP/1.1 503 Service Unavailable");
                    exit("Your IP is banned for 24 hours, because of too many requests.");
                }
            }
            else if ($diff>3600) { unlink($path); } // If first request was more than 1 hour, new ip file
            else {
                $current = ((int)$content[1])+1; // Counter + 1
                if ($current>200) { // We check rpm (request per minute) after 200 request to get a good ~value
                    $rpm = ($current/($diff/60));
                    if ($rpm>10) { // If there was more than 10 rpm -> ban (if you have a request all 5 secs. you will be banned after ~17 minutes)
                        if ($handle = fopen($path, 'w+')) {
                            fwrite($handle, $content[0].'|ban');
                            fclose($handle);
                            // Maybe you like to log the ip once -> die after next request
                        }
                        return;
                    }
                }
                if ($handle = fopen($path, 'w+')) { // else write counter
                    fwrite($handle, $content[0].'|'.$current .'');
                    fclose($handle);
                }
            }
        }
    }

     

    0

    aytac

    22 Eylül 2019

    Web server olarak ne kullanıyorsun ? Apache server la da engelleye bilirsin yada nginx ile hangisini kullanıyorsan bu web serverlar ile aynı ip üzernden gelen belirli bir istekten sayısını aşan ipleri blocklaya bilirsinin veya birden fazla farklı iplerden gelen belirli bir saniye içerisinde birden fazla istek olan iplerde engelleye bilirsin. 

    Bu soruya cevap vermek için üye olmanız veya giriş yapmanız gerekmektedir.