Цитата мудреца

Голосование

Система Orphus. Если вы заметили ошибку на сайте, нажмите сюда.
Загружается, подождите...
Начало сайта Материалы сайта Программы PHP-скрипты
Версия для слабовидящих
Версия для печати

Ограничение на скорость выдачи страниц одному пользователю

Здесь представлены некоторые мои разработки на PHP. Это в, основном, служебные скрипты, которые работают в составе других скриптов и не могут быть протестированы здесь непосредственно.

Вот-вот, кажись тут и напрягается - самому так показалось...
У меня Joomla - буду изучать матчасть.
Спасибо за ответ.
Ответить


Жумла сама обрабатывает все ошибки 404 и тому подобное.
Посмотрите в htaccess, что написано.
Ответить


Ошибка

Я потестировал Ваш скрипт v.3 и в нем обнаружилась ошибка

Надо удалить строки 263 и 264, там лишние операторы } и */

После этого скрипт заработал нормально, но как-то медленновато по сравнению с предыдущей версией v.2
Ответить


medargo, спасибо, что нашли ошибку. Только ошибка была не в строках 263 и 264, а в строках 260-261. Там был комментарий, который закрывал выключенный кусок кода, но оставлял следующую строку.
Медленная работа была из-за специальной задержки, которая должна работать только если страницу открывает робот. Сейчас код исправлен. Обновите у себя - всё будет работать быстро.
Ответить


Опыт использования скрипта

Я попробовал использовать скрипт на сайте под атакой. Сыпется 150-200 обращений к сайту в секунду. Однако заметного облегчения скрипт не принес. Атака шла с более чем 1000 адресов и в силу этого, частота заходов с одного адреса невелика. При стандартных настройках удалось отсеять около 5% обращений. Думаю что наверно надо удлинить время накопления статистики и использовать БД для накопления данных. У Вас нет планов по дальнейшей работе над скриптом?
Ответить


medargo, скрипт изначально не был предназначен для отражения ddos-атак. Основная его задача в том, чтобы во-первых, уменьшить нагрузку на SQL-сервер (именно поэтому не используется БД в работе скрипта), а во-вторых, предотвратить, насколько это возможно, скачивание всего сайта программами-качалками.

medargo писал(а):наверно надо удлинить время накопления статистики

Можете попробовать сделать это самостоятельно. Ибо это - настройка, которую можно регулировать. Только тогда людям чаще будут выскакивать сообщения об ошибке. Представьте, человек жмёт на ссылку, на которой будет не текст, который надо читать, а список других страниц, и нужная ему страница в самом верху. Страница загрузилась за 1 сек., и человек опять нажал на ссылку. - Запрет!

medargo писал(а):использовать БД для накопления данных

Обращение к файлу по его имени, если имя известно, происходит быстрее, чем получение одной записи из БД по первичному индексу. Поэтому даже если у Вас будет 1000 файлов в одной папке, задержки не будет, если только Вы не запросите список этих файлов. А в скрипте мы этого не делаем.

medargo писал(а):У Вас нет планов по дальнейшей работе над скриптом?

Планов нет, потому что не придумал алгоритм.
Сайт может быть действительно популярным так, что эти 1000 адресов могут быть реальными пользователями. И их отсекать нежелательно. С другой стороны, если пошла атака, то можно просто временно отрубать сайт. Заметили большой наплыв - залезли в htaccess и дописали там строчку deny from all (естественно, не руками, а скриптом, который всё это будет анализировать). А на ошибку 403 повесили нужную страницу. А потом кроном через определённое время открыть доступ. Но тут возникает вопрос: к сайту не получат доступ все: и нужные и ненужные; зачем тогда это отключение? Сервер и так лежит... Только спасём других пользователей на сервере, если таковые есть. Но в таком случае хостер должен как-то сам тоже заботиться о предотвращении атак...

В общем, сложный вопрос, и его рамки выходят за границы программирования.
Ответить


Мне удалось победить атаку следующими действиями:

1. Я перенес сайт во вложенную папку. А в корневой директории разместил ваш скрипт.

2. В скрипте заменил сообщение об ошибке на следующий код:

<SCRIPT language="JavaScript">
window.location="http://www.site.ru/site/index.php";
</SCRIPT>

В результате пользователи просто перемещаются на сайт а боты глохнут. А те, кто проходит скрипт попадают на страничку типа start.html и оттуда по ссылке на сам сайт.

3. Я удлинил время до 10 сек.

Вроде все нормально сработало. Каково Ваше мнение?
Ответить


пп. 1 и 2 - хороши. Но ведь и поисковый бот тоже будет обрезан.
По поводу п. 3 - мне кажется, что это слишком. Хотя, если Вы даёте скрипт только в начальной странице, тогда, может и ничего.

Есть ещё один способ ловить злодеев: ловушкой для ботов.
На сайте, желательно на главной странице пишете следующее:
Код: Выделить всё
<div class="invis"><a href="/trap.php">Карта сайта</a></div>

В css-файле пишете:
Код: Выделить всё
.invis {
    display:        none;
}

В файле же trap.php пишете:
Код: Выделить всё
include 'protect/lib/antiddos/antiddos.php';
if (!$ad_IsRobot){
   ad_Ban();
}
?>
<!doctype html public "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Ошибка</title>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1251" />
</head>
<body>
<h1>Ошибочное обращение к сайту</h1>
<p>Свяжитесь с администратором сайта</p>
</body>
</html>

Эта ссылка не будет видна посетителям, а боты, даже если будут тихо и незаметно красться, всё равно попадут в эту ловушку. Главное, чтобы поисковики туда не попадались.
Ответить


пп. 1 и 2 - хороши. Но ведь и поисковый бот тоже будет обрезан.


Ну почему же, Ваш скрипт пропускает поисковики. Т.е. они попадут на страничку за скриптом. Я сделал страничку с надписью "Добро пожаловать" Вход на сайт тут и ссылка на сайт во вложенную папку. Думаю поисковики найдут ссылку и перейдут на сайт во вложенную папку.

Я не прав?

А код на Java просто глушит боты, как правило в них нет Java. А для пользователей это просто переадресация. Таким образом, получается что Ваш скрипт выполняет две функции: пропускает поисковики и подсовывает Java для слишком активных IP.

Кроме того, для Apache я установил - KeepAlive Off

Кроме того, поскольку в корне только индексный файл, то можно ужесточить число обращений для htaccess поскольку все RSS каналы на сайте во вложенной папке.
Ответить


medargo писал(а):Я сделал страничку с надписью "Добро пожаловать" Вход на сайт тут и ссылка на сайт во вложенную папку. Думаю поисковики найдут ссылку и перейдут на сайт во вложенную папку.

Если у Вас есть статическая ссылка, то они найдут и перейдут. Если та ссылка, которую Вы указали в теле JavaScript, то нет.
Но если у Вас есть в индексном файле статическая ссылка, то Вы пропустили внутрь абсолютно всех. Ведь мой скрипт начинает блокировать только при частом повторе обращений. А теперь подумайте, зачем ботам заходить на одну и ту же страницу? Они зашли один раз, получили содержимое индексного файла и через 0,01 сек. уже топают внутрь Вашего сайта и никто им это не запретит, т.к. скрипт Вы поставили только в индексном файле. Суть в том, чтобы скрипт стоял везде, где есть показ страниц (и не стоял в тех страницах, где есть редирект, ибо они перестанут редиректить).

medargo писал(а):Кроме того, для Apache я установил - KeepAlive Off

Вообще бесполезное действие.
KeepAlive позволяет запросить страницу и сопутствующие ей файлы в течение одного соединения. Но запрос стилей и картинок вообще никак не регламентируется скриптом. И если таковые есть, то они всё равно будут отдаваться пользователю, только для каждой картинки ему придётся заново устанавливать соединение с сервером, что замедлит показ страниц абсолютно всем.
Ответить


Пред.След.

Вернуться в PHP-скрипты



Кто сейчас на сайте

Зарегистрированные пользователи: нет зарегистрированных пользователей