|
|
|
| есть мысль, сделать пхп скрипт против дос-атак.
как вам идея
в минуту разрешается допустим 10 обращений к скрипту, на 1 клиент.
все это хранится в сессии.
1 установка сессии
2 проверка. если клиент не вернул сессию, то exit();
3 проверяем время, если превышено то exit(); | |
|
|
|
|
|
|
|
для: user10
(06.12.2011 в 05:40)
| | PHP невозможно победить DDOS - он медленный и жрет ресурсы, на это DDOS-атака и рассчитана. Даже на уровне apache с таким видом атаки сложно бороться. К тому же, как вы на втором шаге определите, что это тот же самый клиент? Если он сессию не поддерживает, да и зачем роботу вам отправлять обратно присланную вами cookie? Он просто по-новой пошлет запрос и все и будет делать это очень часто. Хуже того, атаки идет с сотен и тысяч разных IP-адресов, т.е. даже IP-адрес нельзя заблокировать. | |
|
|
|
|
|
|
|
для: cheops
(06.12.2011 в 14:50)
| | так разница заметна будет
если он не вернул сессию тогда exit() и контент не генерируется. | |
|
|
|
|
|
|
|
для: user10
(06.12.2011 в 15:31)
| | А как вы отличите первое посещение посетителя от второго? Чтобы выставить exit()?
Сессия работает так, пользователь делает первый запрос, сервер заводит сессию и выдает в ответе её номер в cookie. Пользователь устанавливает cookie и пересылает её при каждом следующем запросе, поэтому сессия остается за ним закреплена. Робот не отправляет cookie, ни спамерский, ни ddos, ни поисковый - каждый раз сервер ему предлагает завести сессию, но он ничего не посылает ему в ответ. Сколько посещений - столько и сессий, они просто не работают в случае роботов. Да и зачем DDOS-роботу помогать идентифицировать себя, если его цель как раз наоборот замаскироваться под новые обращения? | |
|
|
|
|
|
|
|
для: 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();
|
| |
|
|
|
|
|
|
|
для: user10
(06.12.2011 в 16:56)
| | У DDOS роботов $_SESSION['human'] всегда будет пустым, они просто не будут поддерживать сессию, как это делают браузеры, вы даже в браузере можете отключить такую поддержку. Вообще наличие сессии зависит от доброй воли браузера и клиента - а у DDOS-роботов этой доброй воли нет. Более того, это браузеры по умолчанию поддерживают сессию, чтобы робот это умел делать - нужно приложить дополнительные усилия, запрограммировать такое поведение. Зачем DDOS-разработчику это делать? Чтобы ему успешнее могли противостоять, вычисляя по сессии? | |
|
|
|
|
|
|
|
для: user10
(06.12.2011 в 16:56)
| | Чтобы в 2.php передалась значение из массива $_SESSION, необходимо, чтобы клиент послал HTTP-заголовок Cookie с SID-сессии, а DDOS-робот этого делать не будет, более того, это делает лишь ограниченное количество роботов, главным образом тех, кому нужно осуществлять автоматическую регистрацию или размещение рекламных сообщений. | |
|
|
|
|
|
|
|
для: cheops
(06.12.2011 в 17:03)
| | дело в том что, если бот не вернет сессию
то массивных mysql запросов не будет, и генерации страницы со всем контентом и ссылками и поиском и тд.
есть ли разница?
а при наличии этоко кода ресурсов потратится 10% в место 100%
тупо будет скрипт завершатся. я уже не знаю как объяснить | |
|
|
|
|
|
|
|
для: user10
(06.12.2011 в 17:07)
| | Я не уверен на 100%, т.к. не отслеживал, но думаю с яндексом, гуглом и пр. можно тогда тоже попрощаться. | |
|
|
|
|
|
|
|
для: user10
(06.12.2011 в 17:07)
| | > а при наличии этоко кода ресурсов потратится 10% в место 100%
И помножте эти 10% на 100 тысяч обращений в секунду..... | |
|
|
|
|
|
|
|
для: user10
(06.12.2011 в 17:07)
| | Кроме того, если уж сильно захочется, можно сразу обращаться к 2.php, с уже установленной сессией. Тогда вообще пользы никакой. Но скорее всего вашему серверу и 10%*100000 хватит | |
|
|
|
|
|
|
|
для: Sfinks
(06.12.2011 в 17:23)
| | ну естественно сто миллионов никто и ничто не выдержит. ну а небольшое количество вполне даже наверное и выдержит. например от злобного соседа с 1 компом.
>Кроме того, если уж сильно захочется, можно сразу обращаться к 2.php, с уже установленной сессией. Тогда вообще пользы никакой. Но скорее всего вашему серверу и 10%*100000 хватит
дело в том что в этой сессии еще будет хранится обращение в минуту. допустим 10. если превышает то страницу не генерируем (если сессию передал), а бот запрограммирован на 1000 обращений в минуту или цикл скок успеет сток пошлет. | |
|
|
|
|
|
|
|
для: user10
(06.12.2011 в 17:33)
| | > например от злобного соседа с 1 компом.
Ну наверно от соседа поможет, Хотя зависит от способностей соседа. Я недавно весь свой хостинг положил на лопатки на 4 часа всего одной ошибкой в 1 скрипте.... А админ спал и некому было в процесс через шелл вмешаться и остановить вредителя. Так что ПХП весьма и весьма уязвимая штука! | |
|
|
|
|
|
|
|
для: user10
(06.12.2011 в 17:33)
| | От соседа да, защитит и вполне себе можно строить такую защиту (можно еще коллекционировать его IP-адреса, чтобы правила не потребляли ресурсы для проверки непричастных посетителей). Проблема в том, что такие атаки не рассматриваются как DDOS. | |
|
|
|
|
|
|
|
для: cheops
(06.12.2011 в 18:32)
| | Защита от соседа по ИП - это иногда черевато. Например у меня нет наземной линии инета, поэтому я на мегафон-модеме. Соответственно нет статического ИП. Соответственно заблокировав меня от вашего сайта будет отрезан довольно большой сектор пользователей интернета от мегафона. | |
|
|
|
|
|
|
|
для: Sfinks
(06.12.2011 в 18:58)
| | Это понятно, каждый раз нужно отслеживать, что блокируешь... иногда правда база whois запаздывает, видишь непонятный зарубежный адрес - блокируешь, а потом выясняется, что он уже месяца два за тем же мегафоном, просто база еще не обновилась. Вон люди ходят по форумам и жалуются, что у них сервисы яндекса отсечены - тоже кого-то забанили и отсекли подсеть с n-ным количеством абонентов.
PS Да и в последнее время спамеры освоили технику DDOS - идет поток 10 сообщений в минуту и все с разных IP-адресов, хоть ублокируйся - толку никакого. Приходится байесовские сети подключать и вообще думать заставляют :))) | |
|
|
|
|
|
|
|
для: user10
(06.12.2011 в 17:07)
| | >дело в том что, если бот не вернет сессию
>то массивных mysql запросов не будет, и генерации страницы со всем контентом и ссылками и
>поиском и тд.
Так-то так, но при хорошем DDOS заваливается голый Apache, который только и делает что отправляет 404 или 403 ответ - очень много обращений. Там уже все-равно, исключили вы тяжелый код или нет - Web-сервер не справляется, умудряются даже каналы забивать. PHP же и MySQL находятся на самом дне этой пищевой цепочки, они ситуацию усугубляют, но атака не на них рассчитана, а на то, что повыше. Т.е. смысл в том, что даже если вы вообще PHP и MySQL отключите - DDOS вас завалит. Поэтому бороться с ним на уровне PHP бесполезно (тем более при помощи сессии, роботы просто не будут её поддерживать)... | |
|
|
|
|
|
|
|
для: cheops
(06.12.2011 в 17:42)
| | чтобы защититься, нужно отключать первое звено цепочки - это ваш внешний адрес. Обычно вырубают сам домен, если атака идет на домен. Если атака идет на ip, то это проще, можно просто поменять ip | |
|
|
|