با سلام،
اسکریپت زیر یک اسکریپت ساده جهت بلاک کردن آی پی ها بر اساس تعداد رکوئست ها بر ثانیه در PHP می باشد که قابلیت اضافه کردن به پروژه ها و پلاگین ها و CMS ها را دارد.
فقط نکته مهم اینکه این اسکریپت قرار نیست تمامی حملات DDoS را مهار کند و معجزه کند!
این اسکریپت زمانی کارآیی دارد که حملات لایه 7 با پروتکل http بر روی یک سایت در حال انجام باشد و حملات با تعداد آی پی های محدود باعث کندی سایت شده باشند و احتمالا اگر حمله نسبت به سخت افزار و منابع سرور، فدرتمند محسوب شود ممکن است قبل از اینکه این اسکریپت بخواهد کار خودش را بکند وب سرور با مشکل مواجه شود و سایت از دسترس خارج شود.
این توضیح از آن جهت بود که برخی دوستان ممکن است به صورت اشتباه منظور بنده را متوجه شوند و اگر نه برای حملات لایه 7 باید از سمت وب سرور و حتی قبل از آن حملات شناسایی و مهار شوند.مقدار $r رکوئست های یک آی پی و متغیر $ps زمان بر حسب ثانیه است.
فرض اگر بخواهید که آی پی هایی که در طول 4 ثانیه اگر بیشتر از 8 رکوئست ارسال کرده اند را بلاک کنید باید مثل زیر باشد:
دریافت کد کامل اسکریپت :کد PHP:
$r=8
$ps=4
نکته: یک فایل با نام ip.txt بسازید و سطح دسترسی آن را 777 قرار دهید. بلک لیست آی پی ها در این فایل ذخیره می شوند.کد PHP:
<?php
//M@soud Binaei
//Central-hosting.com
//**********
$r=5;
$ps=5;
//**********
session_start();
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
$ips=file('ip.txt');
foreach($ips as $ipbad)
{
if(trim($ipbad) == $ip){
header('HTTP/1.0 403 Forbidden');
echo'Blocked';
exit();
}
}
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > $ps)) {
session_unset();
session_destroy();
$_SESSION['rec'] = 1;
}
if(!isset($_SESSION['rec']) || $_SESSION['rec']==0){
$_SESSION['rec'] = 1;
$_SESSION['LAST_ACTIVITY'] = time();
}else{
$_SESSION['rec']++;
}
if($_SESSION['rec']>=$r){
$file = 'ip.txt';
$current = file_get_contents($file);
$current .= $ip."\n";
file_put_contents($file, $current);
}
?>
تشکر فراموش نشود![]()