🔧 Как защитить сайт от спама — 3 июня 2026 г. в 11:36:02.843
🔧 Как защитить сайт от спама Рано или поздно каждый сталкивается с этой проблемой. Сообщения с кривыми ссылками, имена латиницей вперемешку с цифрами, заявки пачками по ночам. Боты находят форму и начинают её долбить. Проблема не только в том что это мусор в почте, на который тратит время отдел продаж. На этом спаме учатся алгоритмы яндекса, что приводит к деградации РК. Недавно помог одному из своих клиентов побороться со спамом. Стартовая точка: 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. Кто-то натравил его именно на сайт моего клиента. Спамил он, подделывая откуда пришел, не попадая под ограничения частоты, с "правильными" номерами, и не палился на скрытом поле. В общем эту тварь хрен поймаешь. Но я поймал с помощью еще одного метода, о котором напишу в следующем посте.

