File size: 3.21Kb
<?
#-----------------------------------------------------#
# ********* TerrinCMS ********* #
# Made by : Terrin #
# E-mail : [email protected] #
# WAP-Site : http://lorinz.ru #
# ICQ : 344-20-52 #
# Вы не имеете право вносить изменения в код скрипта #
# для его дальнейшего распространения #
#-----------------------------------------------------#
# --- Если IP нет совсем --- #
$ip = preg_replace('|[^0-9\.]|', '', $_SERVER['REMOTE_ADDR']);
if ($ip == NULL){
header("Location: /pages/banned.php?mode=no_ip"); exit;
}
if($_COOKIE['login'] == NULL){ // бан по IP
$ban_ip = mysql_query('SELECT * FROM ban WHERE ip = "'.$ip.'"');
if(mysql_num_rows($ban_ip) != 0){ header("Location: /pages/banned.php?mode=ip"); }
} else { // бан юзера
$ban = mysql_query('SELECT * FROM ban WHERE login = "'.$_COOKIE['login'].'"');
if(mysql_num_rows($ban) != 0){ header("Location: /pages/banned.php?mode=user"); }
}
# --- Защита от Ддоса --- #
$doslimit = 100;
$trans = preg_replace('|[^0-9\.]|', '', $_SERVER['REMOTE_ADDR']);
# ---------- Этап первый -- Удаляем просроченые записи -------------- #
$time_off=mysql_query("SELECT * FROM `ddos`");
while($set_or=mysql_fetch_array($time_off)){
if($set_or['time'] <= time()){
mysql_query('DELETE FROM `ddos` WHERE `id` = "'.$set_or['id'].'"');
}
}
# ---------- Этап Второй -- Удаляем просроченые записи у данного ip -------------- #
$time_off_ip=mysql_query('SELECT * FROM `ddos` WHERE ip = "'.$trans.'"');
while($set_or_ip=mysql_fetch_array($time_off_ip)){
if($set_or_ip['time'] <= time()){
mysql_query('DELETE FROM `ddos` WHERE `id` = "'.$set_or_ip['id'].'"');
}
}
/*
# ---------- Этап Третий -- Записываем логи -------------- #
$time = time() + 60;
if (isset($_SERVER['REQUEST_URI'])) {$request_uri = urldecode(substr(strtok($_SERVER['REQUEST_URI'], 'S'), 1));}
if (isset($_SERVER['HTTP_REFERER'])) {$http_referer = urldecode(strtok($_SERVER['HTTP_REFERER'], 'S'));} else {$http_referer = 'Не определено';}
$arbuz = explode("/",$_SERVER['HTTP_USER_AGENT']);
$arbuz = htmlspecialchars($arbuz[0]);
if($_COOKIE['login'] == !NULL){$ddoser = $_COOKIE['login']; } else {$ddoser = 'Гость'; }
mysql_query("INSERT INTO `ddos`(`time`, `ip`, `url`, `refer`, `brow`, `user`) VALUES ('".$time."','".$trans."','".$request_uri."','".$http_referer."','".$arbuz."','".$ddoser."');");
*/
# ---------- Этап Четвертый -- Автоматическая блокировка -------------- #
$count_ddos=mysql_result(mysql_query("SELECT COUNT(*) FROM `ddos` WHERE `ip`='".$trans."'"),0);
if($count_ddos > $doslimit){
$ban = mysql_query('SELECT * FROM ban WHERE ip = "'.$trans.'"');
$ban = mysql_fetch_assoc($ban);
if(empty($ban['ip'])){
mysql_query('INSERT INTO `ban` (`ip`, `pri`) VALUES ("'.$trans.'","Ддос сайт. забанен!");');
mysql_query('DELETE FROM `ddos` WHERE `ip` = "'.$trans.'"');
}
}
?>