نمونه فایل آنتی دیداس (AntiDDOS-System) با پی‌اچ‌پی PHP


در دنیای امروز، حملات دیداس (DDoS) به عنوان یکی از بزرگ‌ترین تهدیدات برای سرورها و وب‌سایت‌ها شناخته می‌شود. حملات دیداس، به صورت تجمعی و هماهنگ، ترافیک زیادی را به سمت سرور هدایت می‌کنند، به طوری که سرور قادر به پاسخگویی به درخواست‌های قانونی کاربران نمی‌شود و در نهایت، سایت از دسترس خارج می‌شود. بنابراین، توسعه یک سیستم ضد دیداس قدرتمند و موثر، امری حیاتی است که می‌تواند مانع از بروز این نوع حملات شود و امنیت وب‌سایت را تضمین کند.
در این مقاله، قصد داریم یک نمونه فایل آنتی دیداس ساده و در عین حال کارآمد با زبان برنامه‌نویسی PHP ارائه دهیم. این سیستم، بر اساس اصول اولیه تشخیص ترافیک مشکوک و محدود کردن درخواست‌ها طراحی شده است، و می‌تواند به عنوان یک لایه محافظتی در کنار دیگر ابزارهای امنیتی مورد استفاده قرار گیرد. همچنین، در ادامه، به صورت جامع و تفصیلی، ساختار و نحوه عملکرد این سیستم را بررسی خواهیم کرد، تا بتوانید آن را به راحتی در پروژه‌های خود پیاده‌سازی کنید و در مقابل حملات دیداس، مقاوم‌تر باشید.

ساختار کلی سیستم ضد دیداس




در اصل، یک سیستم ضد دیداس باید بتواند درخواست‌های ورودی را تحلیل کند، تعداد درخواست‌ها را در مدت زمان مشخصی رصد کند و در صورت شناسایی ترافیک مشکوک، اقدامات مناسب را انجام دهد. این اقدامات می‌تواند شامل مسدود کردن IP، محدود کردن تعداد درخواست، یا ثبت اطلاعات در لاگ‌ها باشد. در نمونه‌ای که قرار است ارائه کنیم، ما از روش‌های ساده و ابتدایی بهره می‌گیریم، اما با قابلیت توسعه و گسترش آسان.
برای پیاده‌سازی چنین سیستمی، نیاز است که چند مفهوم پایه‌ای را در نظر بگیریم:
- استفاده از ذخیره‌سازی موقت (Session یا Cache): برای نگهداری تعداد درخواست‌ها و IP‌های مشکوک.

- شناسایی درخواست‌های تکراری یا بیش از حد: که نشان‌دهنده حملات احتمالی هستند.

- محدود کردن درخواست‌ها: بر اساس تعداد درخواست‌های مجاز در زمان معین.

- مسدود کردن IPهای مخرب: در صورت تکرار درخواست‌های بیش از حد.
در ادامه، نمونه کد PHP را مشاهده می‌کنید که این اصول را پیاده‌سازی می‌کند.

کد نمونه سیستم آنتی دیداس PHP




php  

<?php

session_start();
$max_requests = 100; // حداکثر درخواست مجاز در هر دقیقه

$time_window = 60; // زمان پنجره زمانی به ثانیه
// مسیر فایل لاگ برای ثبت درخواست‌ها

$log_file = 'request_log.txt';
// تابع برای ثبت درخواست‌ها در لاگ

function log_request($ip) {

global $log_file;

$current_time = time();

file_put_contents($log_file, "$ip,$current_time\n", FILE_APPEND);

}
// تابع برای چک کردن تعداد درخواست‌ها در طول زمان مشخص

function check_requests($ip) {

global $log_file, $max_requests, $time_window;

if (!file_exists($log_file)) {

return true;

}

$lines = file($log_file, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

$request_times = [];

foreach ($lines as $line) {

list($logged_ip, $timestamp) = explode(',', $line);

if ($logged_ip == $ip) {

$request_times[] = (int)$timestamp;<... ← ادامه مطلب در magicfile.ir