Атака ботов на сайт.

Доброго времени суток, дорогие читатели блога Мои тараканы!

Сегодня хочу рассказать об одном случае, который произошел со мною на днях.

Боты атакуютВсё началось с того,  что ко мне обратился клиент, сайт которого находится у меня на обслуживании, с просьбой закинуть новые фото. Вроде бы, казалось,  пустяк, загрузить на сайт полдесятка свежих фотографий, но на это у меня ушло почти 3 часа. А всё потому что любые действия на сайте откликались пятисот…,не помню какой точно, ошибкой сервера.

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

Следующие дней пять я был сильно загружен на офлайн работе и к компу я практически не подходил. Но оказывается все эти дни мой хостер присылал сообщения о том, что, согласно моему тарифному плану, мой аккаунт создаёт чрезмерную нагрузку на сервер. Мне предлагалось самостоятельно искать решение проблемы и понижать нагрузку до допустимых рамкок, или за отдельную плату покупать выделенный сервер.

Вот одно из таких писем:

Здравствуйте!

Ваш аккаунт _ _ _ _ _ _ оказывает чрезмерную нагрузку на сервер.

Нагрузка на CPU характеризует суммарное время, затраченное процессорами сервера на обработку процессов аккаунта. Для снижения нагрузки следует оптимизировать скрипты, исключить выполнение требующих значительных вычислительных ресурсов процессов.

Нагрузка на MySQL характеризует суммарное время, затраченное на обработку запросов к базам данных аккаунта. Для снижения нагрузки на MySQL следует оптимизировать базу данных, а также запросы к ней, исключить чрезмерное количество запросов, а также длительно обрабатываемые запросы.

По данным статистики нагрузка на сервер:
Дата, нагрузка на CPU, нагрузка на MySQL
_ _ _ _   _ _  _ _

_ _ _ _   _ _  _ _

_ _ _ _   _ _  _ _

_ _ _ _   _ _  _ _

— что превышает допустимые значения на текущем тарифном плане: нагрузка на CPU до 50 cp, MySQL до 1000.
Информацию по нагрузке за прошедшие дни и ограничения тарифных планов Вы можете посмотреть в панели управления.

Мы можем предложить Вам следующие варианты решения сложившейся ситуации:
1. Устранить источник нагрузки, самостоятельно оптимизировав сайты, используя средства CMS, либо специализированное ПО (профайлеры, фреймворки) на локальном компьютере.
2. Обратиться к соответствующим специалистам для снижения оказываемой нагрузки, в случае если Вы не готовы самостоятельно произвести оптимизацию.
3. Рассмотреть вариант перехода на техническое решение без ограничений по нагрузке (выделенный или виртуальный сервер).

Статистически, рост нагрузки чаще всего возникает по одной из следующих причин:
1) рост посещаемости;
2) использование неоптимизированных скриптов;
3) отключение кеширования;
4) действие вредоносного кода;
5) нежелательная активность поисковых или иных ботов;
6) увеличение объёма обрабатываемых данных.

Скачок нагрузки может быть вызван различными причинами, например:
1) скачок посещаемости;
2) работы на сайте;
3) действие вредоносного кода;
4) DoS-атака;
5) ошибка в логике работы скриптов.

В течение 7 дней (до _ _ _ _   _ _  _ _ включительно) Вам необходимо снизить создаваемую нагрузку до ограничений тарифного плана, либо принять решение об адекватной смене условий размещения. Если по истечении этого срока будет по-прежнему наблюдаться повышенная нагрузка, дальнейшее обслуживание на прежних условиях будет невозможно.

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

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

Но о них (о этих письмах) я узнал когда на телефон мне начали приходить SMS что мои сайты недоступны. Вот тогда я забил тревогу.

Перед отключением мне было отправлено сообщение следующего содержания:

Здравствуйте!

Напоминаем, что Ваш аккаунт _ _ _ _ _ оказывает чрезмерную нагрузку на сервер.

Так как уровень создаваемой аккаунтом нагрузки угрожает стабильной работе сервера, мы вынуждены приостановить работу сайтов.

При имеющихся показателях нагрузки мы можем предложить Вам следующие варианты дальнейшего размещения:

— Аренда выделенного сервера.
……………

— Аренда виртуального сервера (VDS)

…………..

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

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

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

Но с другой стороны, даже если бы я знал (в принципе я догадывался), какой сайт и почему является источником проблем, я не мог бы их решить, потому что сайты были отключены. Замкнутый круг получается. Мне нужно при отключенных сайтах устранить все неполадки. Потом написать в сапорт, чтобы сайты включили, но если проблема окажется нерешенной,  мой аккаунт просто удалят, без права восстановления. А вместе с ним девять сайтов, половина из которых клиентские.

У меня было подозрение,  что нагрузку создает мой анимешный сайт. Дело в том, что это был мой первый опыт с сайтами такого плана. Ожидаемых результатов он не дал (точнее он не дал вообще никаких результатов). Полагаясь на свой скудный опыт,  я понял, что если дело не идет, то не стоит действовать напролом, а нужно искать другой подход. Послушав советы в комментах к статье об этом проекте, я познакомился с DLE и убедился, что для моего сайта это то, что нужно.

Как раз в это время я начал замечать что на сайте начали регистрироваться боты. Но ничего пресекающего не предпринял, поскольку считал, что в ближайшее время я всё перенесу на новый движок, и потом буду уже что то с ними решать. Но не всё так вжизни происходит, как тебе хочется, череда событий в личной жизни заставила на некоторое время меня забыть о своих сайтах. А в это время боты продолжали свою деятельность.

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

Хорошо, но что делать дальше? Чтобы перенести сайт на новый движок,  мне нужно,  чтобы функционировали оба сайта. Для этого планирую подключить ущербный сайт и быстро исправить ошибки, плюс создать поддомен и на нем установить новый движок. Потом вручную переместить материалы.

Но не всё так просто. Когда я восстановил сайт и зашел в админку,  я был в шоке — там зарегистрировалось около двух сотен ботов! За неделю они успели наштамповать около тысячи статей и около ДВАДЦАТИ ТЫСЯЧ комментариев!!!!

Регистрацию на сайте запретил. Комментирование запретил. Ботов удалил. Статьи удалил (хотя на это ушло немножко больше времени). А вот когда дело дошло до комментариев… Как вы думаете, сколько мне понабилось бы времени, если бы я начал удалять комментарии вручную через админку, когда ресурсы движка не позволяли удалять даже сотню сообщений за один раз? Неделю, как минимум.

Пришлось через MySQLAdmin лезть в базу данных. Как я не люблю это дело. Если честно,  я её даже боюсь :) , но что делать.

Нашел таблицу,  в которой хранятся все комментарии ( у меня это была joomla_k2_comments) и во вкладке SQL ввёл следующий запрос:

DELETE FROM joomla_k2_comments WHERE 1

Пара секунд и комментариев больше нет.

P.S. Хочу принести  извинения за длительное отсутствие. Дело в том, что этот пост писался ещё в июне, но из-за событий у меня на родине мне было не до блога — всё свободное время уходит на просмотр сводок с фронтов. Да и вообще,  писать о каких-то бытовых проблемах, когда на родине происходит ТАКОЕ — мне кажется аморально. Надеюсь,  в дальнейшем ситуация пойдет на поправку, как на Донбассе,  так и у меня в блоге.

С уважением, Мышак Петр!  

 

Создаем табы (вкладки) для сайта без JavaScript на CSS.

Доброго времени суток, уважаемые читатели блога Moi-tarakany.

Как-то я публиковал у себя в блоге статью о гармошке  для сайта в которой информация открывалась-пряталась по клику в горизонтальной спройлере. Сегодня хочу поделится похожей штукой — это «табы» информация в которых открывается во вкладках.

Для этого в то место на сайте где хотим видеть табы размещаем этот код:

<div class="korpus">
<input type="radio" name="odin" checked="checked" id="vkl1"/><label for="vkl1">CSS</label><input type="radio" name="odin" id="vkl2"/><label for="vkl2">HTML</label><input type="radio" name="odin" id="vkl3"/><label for="vkl3">Дополнительно</label>
<div>первая вкладка</div>
<div>вторая вкладка</div>
<div>третья вкладка</div>
</div>

A в файл CSS добавляем следующий код:

.korpus > div, .korpus > input { display: none; }
.korpus label { padding: 5px; border: 1px solid #aaa; line-height: 28px; cursor: pointer; position: relative; bottom: 1px; background: #fff; }
.korpus input[type="radio"]:checked + label { border-bottom: 2px solid #fff; }
.korpus > input:nth-of-type(1):checked ~ div:nth-of-type(1),
.korpus > input:nth-of-type(2):checked ~ div:nth-of-type(2),
.korpus > input:nth-of-type(3):checked ~ div:nth-of-type(3) { display: block; padding: 5px; border: 1px solid #aaa; }

Ещё немножко пошаманив над кодом я получил такой результат. Всё просто, без всяких заморочек.

P.S. Данный пример подсмотрел здесь.

С уважением, Мышак Пётр!