View file core/ban_sistem.php

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.'"');
}
}
?>