Рано или поздно каждый сталкивается с этой проблемой. Сообщения с кривыми ссылками, имена латиницей вперемешку с цифрами, заявки пачками по ночам. Боты находят форму и начинают её долбить.
Проблема не только в том что это мусор в почте, на который тратит время отдел продаж. На этом спаме учатся алгоритмы яндекса, что приводит к деградации РК.
Недавно помог одному из своих клиентов побороться со спамом. Стартовая точка: 97 спамных заявок в день.
Использовал эти методы:
1. Скрытое поле
На форму добавляется скрытое поле, которое живой человек не видит и не трогает, тк оно спрятано за край экрана. А бот видит все поля в коде и заполняет всё подряд. Если скрытое поле заполнено, заявку молча отсекаем.
Показываем боту свою страницу спасибо. Чтобы он думал что заявка оставлена успешно и не долбился снова.
Ставится быстро, никак не мешает пользователю. Отсекает массовых ботов, которые тупо заполняют все поля.
2. Ограничение частоты
Фиксируем с какого IP пришла заявка и не даем повторно отправить в течение 15 сек. Многие ставят тут 30, но мне кажется это много. Если человек реально ошибся в форме, может и не дождаться.
Боты, которые шлют десятки заявок в минуту отсекаются.
3. Проверка Referer(откуда пришел)
Браузер сообщает, с какой страницы человек нажал кнопку. Проверяем, что заявка отправлена реально со страницы сайта, а не напрямую ботом в обход сайта.
Но есть антивирусы, расширения и разные сервисы приватности, которые стирают эту инфу у нормальных посетителей. Поэтому юзаем в комбинации с другими инструментами.
4. Валидация телефона
Убираем из получаемых номеров все кроме цифр и смотрим длину. Если выбивается из 10-12 цифр, то отклоняем.
5. Только POST
Форма должна отправляться правильным техническим способом POST. Боты иногда пробуют отправить данные другим, упрощённым способом GET, прямо через ссылку. Такие запросы отклоняем.
Это привело к тому, что объем спама упал с 97 писем в день до 2,2! И с этим уже можно жить, но хочется же полностью вытравить...
Для этого надо изучить врага получше. Скачал логи с сервера и вычислил его! Там прям его визитка есть в строке User-Agent. Он там под именем Python aiohttp/3.9.1.
Этот паршивец даже и не скрывался. Это целенаправленно атакующий бот, написанный на языке Python с библиотекой aiohttp (инструмент, чтобы слать запросы пачками), версии 3.9.1. Кто-то натравил его именно на сайт моего клиента.
Спамил он, подделывая откуда пришел, не попадая под ограничения частоты, с "правильными" номерами, и не палился на скрытом поле. В общем эту тварь хрен поймаешь. Но я поймал с помощью еще одного метода.
После этого спам пропал вообще. С 97 писем в день, до 0.
Как вы думаете, чем был пойман поганец?