Просмотр файла core/ban_sistem.php

Размер файла: 3.21Kb
  1. <?
  2. #-----------------------------------------------------#
  3. # ********* TerrinCMS ********* #
  4. # Made by : Terrin #
  5. # E-mail : mali.kol@mail.ru #
  6. # WAP-Site : http://lorinz.ru #
  7. # ICQ : 344-20-52 #
  8. # Вы не имеете право вносить изменения в код скрипта #
  9. # для его дальнейшего распространения #
  10. #-----------------------------------------------------#
  11. # --- Если IP нет совсем --- #
  12.  
  13. $ip = preg_replace('|[^0-9\.]|', '', $_SERVER['REMOTE_ADDR']);
  14. if ($ip == NULL){
  15. header("Location: /pages/banned.php?mode=no_ip"); exit;
  16. }
  17. if($_COOKIE['login'] == NULL){ // бан по IP
  18. $ban_ip = mysql_query('SELECT * FROM ban WHERE ip = "'.$ip.'"');
  19. if(mysql_num_rows($ban_ip) != 0){ header("Location: /pages/banned.php?mode=ip"); }
  20. } else { // бан юзера
  21. $ban = mysql_query('SELECT * FROM ban WHERE login = "'.$_COOKIE['login'].'"');
  22. if(mysql_num_rows($ban) != 0){ header("Location: /pages/banned.php?mode=user"); }
  23. }
  24. # --- Защита от Ддоса --- #
  25. $doslimit = 100;
  26. $trans = preg_replace('|[^0-9\.]|', '', $_SERVER['REMOTE_ADDR']);
  27. # ---------- Этап первый -- Удаляем просроченые записи -------------- #
  28. $time_off=mysql_query("SELECT * FROM `ddos`");
  29. while($set_or=mysql_fetch_array($time_off)){
  30. if($set_or['time'] <= time()){
  31. mysql_query('DELETE FROM `ddos` WHERE `id` = "'.$set_or['id'].'"');
  32. }
  33. }
  34. # ---------- Этап Второй -- Удаляем просроченые записи у данного ip -------------- #
  35. $time_off_ip=mysql_query('SELECT * FROM `ddos` WHERE ip = "'.$trans.'"');
  36. while($set_or_ip=mysql_fetch_array($time_off_ip)){
  37. if($set_or_ip['time'] <= time()){
  38. mysql_query('DELETE FROM `ddos` WHERE `id` = "'.$set_or_ip['id'].'"');
  39. }
  40. }
  41. /*
  42. # ---------- Этап Третий -- Записываем логи -------------- #
  43. $time = time() + 60;
  44. if (isset($_SERVER['REQUEST_URI'])) {$request_uri = urldecode(substr(strtok($_SERVER['REQUEST_URI'], 'S'), 1));}
  45. if (isset($_SERVER['HTTP_REFERER'])) {$http_referer = urldecode(strtok($_SERVER['HTTP_REFERER'], 'S'));} else {$http_referer = 'Не определено';}
  46. $arbuz = explode("/",$_SERVER['HTTP_USER_AGENT']);
  47. $arbuz = htmlspecialchars($arbuz[0]);
  48. if($_COOKIE['login'] == !NULL){$ddoser = $_COOKIE['login']; } else {$ddoser = 'Гость'; }
  49. mysql_query("INSERT INTO `ddos`(`time`, `ip`, `url`, `refer`, `brow`, `user`) VALUES ('".$time."','".$trans."','".$request_uri."','".$http_referer."','".$arbuz."','".$ddoser."');");
  50. */
  51. # ---------- Этап Четвертый -- Автоматическая блокировка -------------- #
  52. $count_ddos=mysql_result(mysql_query("SELECT COUNT(*) FROM `ddos` WHERE `ip`='".$trans."'"),0);
  53. if($count_ddos > $doslimit){
  54. $ban = mysql_query('SELECT * FROM ban WHERE ip = "'.$trans.'"');
  55. $ban = mysql_fetch_assoc($ban);
  56. if(empty($ban['ip'])){
  57. mysql_query('INSERT INTO `ban` (`ip`, `pri`) VALUES ("'.$trans.'","Ддос сайт. забанен!");');
  58. mysql_query('DELETE FROM `ddos` WHERE `ip` = "'.$trans.'"');
  59. }
  60. }
  61. ?>