• DONATE to NULLED!
    Форуму и его команде можно помочь, мотивировать модераторов разделов.
    Помогите модератору этого раздела killoff лично.

Помощь Система защиты от HTTP-флуда

Статус
В этой теме нельзя размещать новые ответы.

Demon425

Постоялец
Регистрация
9 Июл 2008
Сообщения
472
Реакции
120
Всем известен хак Antioverload для DLE, вот он ...

PHP:
<?php
/*
 * Модуль antioverload
 */
/* Время задержки в секундах */
$ad_delay=0.5;
/* Путь к папке с временными файлами. Должен существовать */
$ad_DirName=$_SERVER['DOCUMENT_ROOT'].'/tmp';

/*
 *---------------------------------------------------------
 * Список поисковых роботов.
 *---------------------------------------------------------
 */
$ad_Robots_UserAgent=array(
   'aipbot',
   'Aport',
   'eStyleSearch',
   'Gigabot',
   'Gokubot',
   'Google',
   'MJ12bot',
   'msnbot',
   'PlantyNet_WebRobot',
   'StackRambler',
   'TurtleScanner',
   'Yahoo',
   'Yandex',
   'YaDirectBot',
);

/*
 *----------------------------------------------------------
 * Функция создаёт в указанной директории файл, начинающийся
 * с буквы a (для отличия от других возможных файлов) и
 * содержащий в имени ip-адрес клиента.
 *----------------------------------------------------------
 */
function ad_WiteIP($dir){
   $f=fopen($dir.'/a'.$_SERVER['REMOTE_ADDR'], 'w');
   fclose($f);
}
/*
 *----------------------------------------------------------
 * Проверка на наличие в поле HTTP_USER_AGENT чего-нибудь из
 * вышенаписанного списка.
 *----------------------------------------------------------
 */
$ad_IsRobot=false;
foreach ($ad_Robots_UserAgent as $match){
   if (strstr($_SERVER['HTTP_USER_AGENT'], $match)){
      $ad_IsRobot=true;
      break;
   }
}

/*
 *---------------------------------------------------------
 * Поисковые роботы не любят, когда к адресу страницы
 * добавляется переменная сессии. Поэтому, если на сайте
 * используются сессии, то их лучше включать, если агент -
 * не робот.
 * Если сессии не используются, то этот кусок можно убрать.
 *---------------------------------------------------------
 */
if (!$ad_IsRobot){
   session_start();
}

if (!$ad_IsRobot){
   /*** Чтение каталога и удаление старых файлов ***/
   $ad_dir      =opendir($ad_DirName)
      or die('Отсутствует директория для временных файлов');
   $ad_now      =time();
   $ad_forbid   =$ad_now-$ad_delay;
   /* IP-адрес в имени файла, начинающегося на букву a, 
      а время обращения - время изменения файла */
   while (false!==($ad_FName=readdir($ad_dir))){
      if (ereg('^a[1-9]',$ad_FName)
         && (@ filemtime($ad_DirName.'/'.$ad_FName)<$ad_forbid)){
         @ unlink($ad_DirName.'/'.$ad_FName);
      }
   }
   closedir($ad_dir);
   /*** Проверка на существование пометки
      о недавнем обращении с данного ip-адреса ***/
   if (file_exists($ad_DirName.'/a'.$_SERVER['REMOTE_ADDR'])){
      /* Если обращение было недавно, то выводим сообщение об ошибке */
      header('HTTP/1.0 503 Service Unavailable');
      header('Status: 503 Service Unavailable');
      header('Retry-After: '.$ad_delay*3);
?>
<!doctype html public "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Error 503 [Service Temporary Unavailible]</title>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
<META HTTP-EQUIV="Refresh" Content="5; URL= http://XXX.XXX.XXX.XXX">
</head>
<body bgcolor="#A5C77A">
<center>
<h2>Превышен лимит подключений</h2>
<br>
<br>
<p>Вы превысили лимит подключений.<br>
Станица будет обновлена автоматически.
</p>
</center>
</body>
</html>
<?php
      ad_WiteIP($ad_DirName);   // Перед выходом записываем ip
      exit;
   }else{
      ad_WiteIP($ad_DirName);
   }
}
?>

Помимо того, что он делает, хотелось бы его модернизовать таким способом:

- во время выполнения, IP записывается в TXT-файл, каждый с новой строки в формате
192.168.0.1 | 6
192.168.0.2 | 7
где 6 и 7 - количество раз срабатывания защиты. Т.е. это был бы лог-файл;

- помимо файла что выше, есть ещё TXT-база, в которой содержатся чёрные IP, и который скрипт сам пополняет, путём: сверка есть ли в логе уже этот IP, если да - проверка сколько было раз срабатывания, если это число превышает указанное в конфигурации - занесение в список блокировки;

- дополнительный TXT-файл, в котором будет хранится база "зарезервированных" IP, т.е. чтоб для некоторых IP использовать другие значения $ad_delay и количества попыток доступа перед блокировкой (несколько юзеров на одном IP и т.п. задаётся админом);

- если IP не забанен - добавляется meta refresh на сайт, если нет, редирект на страничку с сообщением, что IP забанен, обращатся к админу (обычный html-файл);

- про админку уже не говорю ... было бы супер, если б лог можно было просмотреть/править через админпанель, как и список резервированных IP; путём считывания/редактирования TXT;

- TXT от внешнего просмотра можно закрыть посредством htaccess;

И главный вопрос реально ли это сделать ? :) думаю большинству ДЛешников это бы пригодилось ...
 
Пардон, а вообще для чего тот скрипт?:nezn:
 
Цитата с 4дле:

Случилось мне однажды столкнуться с ситуацией, когда мой хостер предъявил мне претензию о том, что мой акаунт создаёт непомерно большую нагрузку на MySQL-сервер. Посмотрев логи, я заметил, что такую нагрузку создают программы-качалки, которые копируют сайт целиком на локальный компьютер. Во время обращения к странице происходит несколько sql-запросов к базе данных. А если учесть, что эти программы готовы скачивать сразу несколько страниц с сайта, то получается, что в секунду идёт от 3 до 10 запросов. При такой «атаке» серверу действительно приходится не сладко.
Решением я увидел ограничение доступа к сайту с одного ip-адреса чаще, чем один раз в 2 секунды. Проверка происходит без использования sql-сервера, поэтому идёт достаточно быстро.
 
Решением я увидел ограничение доступа к сайту с одного ip-адреса чаще, чем один раз в 2 секунды.

а как быть с теми, кто на одном ip висит в домашних сетях?
 
+конфликтуют сессии
 
А как это прикрутить к дле? При include не открывается сайт и лиса пишет то что сайт перенаправляет сам на себя и это не закончится никогда... куда и как его прописать, и надо ли открывать доступ (чмод) на хтаккцесс?
 
Видел на 4дле (вроде) хак, выдающий ошибку 500, если запросов от одного юзера больше, чем 1 в N секунд...

Поищите. В целом - способ хороший... Граждане тырящие получал полный сайт из 500-отых ошибок :D
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху