Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Борьба с DDOS-атаками при помощи сессий PHP
 
 автор: user10   (06.12.2011 в 05:40)   письмо автору
 
 

есть мысль, сделать пхп скрипт против дос-атак.
как вам идея

в минуту разрешается допустим 10 обращений к скрипту, на 1 клиент.
все это хранится в сессии.

1 установка сессии
2 проверка. если клиент не вернул сессию, то exit();
3 проверяем время, если превышено то exit();

  Ответить  
 
 автор: cheops   (06.12.2011 в 14:50)   письмо автору
 
   для: user10   (06.12.2011 в 05:40)
 

PHP невозможно победить DDOS - он медленный и жрет ресурсы, на это DDOS-атака и рассчитана. Даже на уровне apache с таким видом атаки сложно бороться. К тому же, как вы на втором шаге определите, что это тот же самый клиент? Если он сессию не поддерживает, да и зачем роботу вам отправлять обратно присланную вами cookie? Он просто по-новой пошлет запрос и все и будет делать это очень часто. Хуже того, атаки идет с сотен и тысяч разных IP-адресов, т.е. даже IP-адрес нельзя заблокировать.

  Ответить  
 
 автор: user10   (06.12.2011 в 15:31)   письмо автору
 
   для: cheops   (06.12.2011 в 14:50)
 

так разница заметна будет
если он не вернул сессию тогда exit() и контент не генерируется.

  Ответить  
 
 автор: cheops   (06.12.2011 в 16:29)   письмо автору
 
   для: user10   (06.12.2011 в 15:31)
 

А как вы отличите первое посещение посетителя от второго? Чтобы выставить exit()?

Сессия работает так, пользователь делает первый запрос, сервер заводит сессию и выдает в ответе её номер в cookie. Пользователь устанавливает cookie и пересылает её при каждом следующем запросе, поэтому сессия остается за ним закреплена. Робот не отправляет cookie, ни спамерский, ни ddos, ни поисковый - каждый раз сервер ему предлагает завести сессию, но он ничего не посылает ему в ответ. Сколько посещений - столько и сессий, они просто не работают в случае роботов. Да и зачем DDOS-роботу помогать идентифицировать себя, если его цель как раз наоборот замаскироваться под новые обращения?

  Ответить  
 
 автор: user10   (06.12.2011 в 16:56)   письмо автору
 
   для: cheops   (06.12.2011 в 16:29)
 

1.php

session_name("abc");
session_start();
$_SESSION['human'] = true;
header("location: 2.php");


2.php

session_name("abc");
session_start();
if($_SESSION['human'])
{
     echo "основной код";
} else exit();

  Ответить  
 
 автор: cheops   (06.12.2011 в 17:00)   письмо автору
 
   для: user10   (06.12.2011 в 16:56)
 

У DDOS роботов $_SESSION['human'] всегда будет пустым, они просто не будут поддерживать сессию, как это делают браузеры, вы даже в браузере можете отключить такую поддержку. Вообще наличие сессии зависит от доброй воли браузера и клиента - а у DDOS-роботов этой доброй воли нет. Более того, это браузеры по умолчанию поддерживают сессию, чтобы робот это умел делать - нужно приложить дополнительные усилия, запрограммировать такое поведение. Зачем DDOS-разработчику это делать? Чтобы ему успешнее могли противостоять, вычисляя по сессии?

  Ответить  
 
 автор: cheops   (06.12.2011 в 17:03)   письмо автору
 
   для: user10   (06.12.2011 в 16:56)
 

Чтобы в 2.php передалась значение из массива $_SESSION, необходимо, чтобы клиент послал HTTP-заголовок Cookie с SID-сессии, а DDOS-робот этого делать не будет, более того, это делает лишь ограниченное количество роботов, главным образом тех, кому нужно осуществлять автоматическую регистрацию или размещение рекламных сообщений.

  Ответить  
 
 автор: user10   (06.12.2011 в 17:07)   письмо автору
 
   для: cheops   (06.12.2011 в 17:03)
 

дело в том что, если бот не вернет сессию
то массивных mysql запросов не будет, и генерации страницы со всем контентом и ссылками и поиском и тд.

есть ли разница?
а при наличии этоко кода ресурсов потратится 10% в место 100%
тупо будет скрипт завершатся. я уже не знаю как объяснить

  Ответить  
 
 автор: Sfinks   (06.12.2011 в 17:17)   письмо автору
 
   для: user10   (06.12.2011 в 17:07)
 

Я не уверен на 100%, т.к. не отслеживал, но думаю с яндексом, гуглом и пр. можно тогда тоже попрощаться.

  Ответить  
 
 автор: Sfinks   (06.12.2011 в 17:19)   письмо автору
 
   для: user10   (06.12.2011 в 17:07)
 

> а при наличии этоко кода ресурсов потратится 10% в место 100%
И помножте эти 10% на 100 тысяч обращений в секунду.....

  Ответить  
 
 автор: Sfinks   (06.12.2011 в 17:23)   письмо автору
 
   для: user10   (06.12.2011 в 17:07)
 

Кроме того, если уж сильно захочется, можно сразу обращаться к 2.php, с уже установленной сессией. Тогда вообще пользы никакой. Но скорее всего вашему серверу и 10%*100000 хватит

  Ответить  
 
 автор: user10   (06.12.2011 в 17:33)   письмо автору
 
   для: Sfinks   (06.12.2011 в 17:23)
 

ну естественно сто миллионов никто и ничто не выдержит. ну а небольшое количество вполне даже наверное и выдержит. например от злобного соседа с 1 компом.

>Кроме того, если уж сильно захочется, можно сразу обращаться к 2.php, с уже установленной сессией. Тогда вообще пользы никакой. Но скорее всего вашему серверу и 10%*100000 хватит

дело в том что в этой сессии еще будет хранится обращение в минуту. допустим 10. если превышает то страницу не генерируем (если сессию передал), а бот запрограммирован на 1000 обращений в минуту или цикл скок успеет сток пошлет.

  Ответить  
 
 автор: Sfinks   (06.12.2011 в 18:28)   письмо автору
 
   для: user10   (06.12.2011 в 17:33)
 

> например от злобного соседа с 1 компом.
Ну наверно от соседа поможет, Хотя зависит от способностей соседа. Я недавно весь свой хостинг положил на лопатки на 4 часа всего одной ошибкой в 1 скрипте.... А админ спал и некому было в процесс через шелл вмешаться и остановить вредителя. Так что ПХП весьма и весьма уязвимая штука!

  Ответить  
 
 автор: cheops   (06.12.2011 в 18:32)   письмо автору
 
   для: user10   (06.12.2011 в 17:33)
 

От соседа да, защитит и вполне себе можно строить такую защиту (можно еще коллекционировать его IP-адреса, чтобы правила не потребляли ресурсы для проверки непричастных посетителей). Проблема в том, что такие атаки не рассматриваются как DDOS.

  Ответить  
 
 автор: Sfinks   (06.12.2011 в 18:58)   письмо автору
 
   для: cheops   (06.12.2011 в 18:32)
 

Защита от соседа по ИП - это иногда черевато. Например у меня нет наземной линии инета, поэтому я на мегафон-модеме. Соответственно нет статического ИП. Соответственно заблокировав меня от вашего сайта будет отрезан довольно большой сектор пользователей интернета от мегафона.

  Ответить  
 
 автор: cheops   (06.12.2011 в 19:21)   письмо автору
 
   для: Sfinks   (06.12.2011 в 18:58)
 

Это понятно, каждый раз нужно отслеживать, что блокируешь... иногда правда база whois запаздывает, видишь непонятный зарубежный адрес - блокируешь, а потом выясняется, что он уже месяца два за тем же мегафоном, просто база еще не обновилась. Вон люди ходят по форумам и жалуются, что у них сервисы яндекса отсечены - тоже кого-то забанили и отсекли подсеть с n-ным количеством абонентов.

PS Да и в последнее время спамеры освоили технику DDOS - идет поток 10 сообщений в минуту и все с разных IP-адресов, хоть ублокируйся - толку никакого. Приходится байесовские сети подключать и вообще думать заставляют :)))

  Ответить  
 
 автор: cheops   (06.12.2011 в 17:42)   письмо автору
 
   для: user10   (06.12.2011 в 17:07)
 

>дело в том что, если бот не вернет сессию
>то массивных mysql запросов не будет, и генерации страницы со всем контентом и ссылками и
>поиском и тд.
Так-то так, но при хорошем DDOS заваливается голый Apache, который только и делает что отправляет 404 или 403 ответ - очень много обращений. Там уже все-равно, исключили вы тяжелый код или нет - Web-сервер не справляется, умудряются даже каналы забивать. PHP же и MySQL находятся на самом дне этой пищевой цепочки, они ситуацию усугубляют, но атака не на них рассчитана, а на то, что повыше. Т.е. смысл в том, что даже если вы вообще PHP и MySQL отключите - DDOS вас завалит. Поэтому бороться с ним на уровне PHP бесполезно (тем более при помощи сессии, роботы просто не будут её поддерживать)...

  Ответить  
 
 автор: Ильдар   (11.12.2011 в 02:14)   письмо автору
 
   для: cheops   (06.12.2011 в 17:42)
 

чтобы защититься, нужно отключать первое звено цепочки - это ваш внешний адрес. Обычно вырубают сам домен, если атака идет на домен. Если атака идет на ip, то это проще, можно просто поменять ip

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования