Инструкция для владельцев сайтов, у которых формы обратной связи заполняют боты, а не живые посетители. Разбираю механизм атак на формы, признаки спам-ботов в логах и способы отличить мусорную заявку от настоящего обращения клиента.
На одном из проектов нашей студии форма заявки за сутки получала десятки отправок с бессмысленным текстом и ссылками на сторонние сайты - классическая картина атаки автоматических скриптов на формы. Разбираю здесь только формы на обычных сайтах и интернет-магазинах на WordPress и аналогичных CMS; защита API и мобильных приложений от ботов - отдельная тема с другими инструментами.
Форма без защиты на посещаемом сайте почти гарантированно получает поток автоматических заявок - вопрос не «будут ли боты», а «сколько времени уйдёт на фильтрацию мусора вручную».
Коротко:
- Спам-боты сканируют формы методом POST и отправляют данные без участия человека, перегружая CRM мусорными заявками.
- Главный признак бота - время заполнения формы менее 3 секунд, что физически невозможно для человека.
- Один honeypot-поле без ротации имени поля обходится обученными ботами за считанные попытки.
- Email-домены вроде одноразовых почтовых сервисов и нетипичный user-agent - дополнительные маркеры автоматической отправки.
- 152-ФЗ требует защищать персональные данные, поступающие через формы, а мусорные заявки от ботов искажают эту обработку и аналитику продаж.
Почему спам-боты атакуют формы и чем это опасно для бизнеса
Механизм атаки простой: скрипт бота сканирует интернет в поисках страниц с формами и отправляет данные методом POST напрямую на обработчик формы, минуя визуальный интерфейс сайта. Боту не нужно открывать страницу в браузере - он находит адрес отправки по исходному коду и шлёт поток автоматических запросов пачками, иногда по несколько сотен в час на один сайт.
Среди ботов, атакующих формы, я условно делю ботов на два типа. Простые боты просто перебирают случайные формы по спискам доменов и льют одинаковый спам-текст без разбора тематики сайта. Продвинутые анализируют структуру формы, подбирают поля под тип бизнеса и даже меняют текст заявки, чтобы обойти простую фильтрацию по ключевым словам.
Последствия для бизнеса ощутимы не сразу, а в накопленном эффекте. Мусорные заявки в CRM отнимают время менеджеров: приходится вручную просматривать каждую заявку, прежде чем понять, что это спам, а не реальный клиент. На одном из проектов клиента менеджер тратил до получаса в день на отсев таких заявок до внедрения защиты.
Второй удар - искажённая аналитика. Если считать конверсию формы по всем отправкам без очистки от ботов, статистика продаж выглядит лучше, чем реальность, а маркетолог принимает решения на основе ложных цифр по аудитории и источникам трафика. Заодно растёт и показатель отказов на странице с формой, потому что боты открывают страницу и не совершают целевого действия. В большинстве проектов, с которыми я работаю, без защиты формы значительная часть заявок на деле оказывается спамом, а не интересом целевой аудитории.
Есть и техническая угроза - перегрузка сервера. Массовые POST-запросы от ботов создают дополнительную нагрузку на хостинг, а при слабом тарифе это может замедлить сайт для реальных посетителей. Отдельно стоит помнить про 152-ФЗ: он регулирует обработку персональных данных, поступающих через формы на сайте, и если в базе скопится вал фейковых записей с произвольными email и телефонами, это создаёт лишний риск при проверке корректности обработки данных.
Как распознать спам-бота: признаки и логи
Прежде чем ставить защиту, стоит понять, атакуют ли вашу форму боты вообще - причина резкого роста заявок не всегда в них, иногда это запущенная реклама. Анализ логов сервера и записей в CRM даёт чёткий ответ за 10-15 минут работы.
Первый и самый надёжный признак - время заполнения формы. Я смотрю на разницу между загрузкой страницы и моментом отправки: если она меньше 3 секунд, это прямо указывает на автоматическую отправку ботом, а не на реального посетителя, который физически не успеет прочитать поля и ввести текст за это время.
Второй маркер - источник запроса. Боты часто идут с одного и того же диапазона IP-адресов или из дата-центров, а не из обычных провайдеров домашнего интернета. User-agent бота либо пустой, либо явно нестандартный - строка, которая не соответствует ни одному реальному браузеру.
Третий признак - email-домены отправителя. Подозрительные заявки часто приходят с одноразовых почтовых сервисов или с произвольных наборов букв в домене, которых не существует в реальности. Поведение посетителя тоже выдаёт бота: он не переходит по другим страницам сайта, не задерживается на других страницах сайта - сразу попадает на форму и отправляет её.
Простая защита в виде одного скрытого honeypot-поля без ротации его имени - приём, который помогает против простых ботов, но обходится обученными ботами, которые читают структуру формы и игнорируют статичные скрытые поля. Подробнее про этот способ защиты и его ограничения - дальше в статье.
Для наглядности сравнил типичные признаки в таблице - она помогает быстро прогнать свежую заявку по чек-листу и понять её происхождение.
| Признак | Человек | Бот |
| Время заполнения формы | от 15-20 секунд и дольше | менее 3 секунд |
| Число заполненных полей | заполняет видимые поля избирательно | заполняет все поля, включая скрытые |
| IP-паттерн источника | разные IP, обычные провайдеры | повторяющиеся IP, дата-центры |
| User-agent | реальный браузер и версия ОС | пустой, устаревший или нетипичный |
Если при разборе логов находите несколько этих признаков одновременно на одной заявке - перед вами точно автоматическая отправка, а не живой посетитель, и дальше имеет смысл переходить к настройке конкретных методов фильтрации.
Капча и альтернативы: reCAPTCHA, SmartCaptcha, Turnstile

Капча (captcha) - это проверка, которая отличает человека от бота перед отправкой формы. Самый известный вариант - reCAPTCHA от Google, но у неё есть несколько версий, и путают их часто.
Версия reCAPTCHA v2 - классический чекбокс «я не робот», иногда с заданием выбрать картинки. reCAPTCHA v3 работает иначе: она не требует от пользователя никаких действий, а в фоновом режиме анализирует поведение и возвращает оценку от 0 до 1 - чем ближе к нулю, тем подозрительнее запрос. Invisible captcha - отдельный режим, который прячет кнопку «я не робот» с формы вообще, показывая задание только если алгоритм решил, что перед ним робот.
У Яндекса есть свой аналог - SmartCaptcha. Она показывает задание только подозрительным запросам, а обычным посетителям сайта не мешает вовсе. Для проектов, ориентированных на российскую аудиторию, это логичный выбор: сервис работает стабильно внутри страны и не зависит от доступности зарубежных сервисов.
Ещё один вариант - Cloudflare Turnstile. Он проверяет пользователя в фоновом режиме без капчи в привычном понимании: не нужно нажимать чекбокс или решать задачи, проверка происходит незаметно через анализ браузера.
Главный минус любой капчи - влияние на конверсию. Каждое лишнее действие на пути к отправке формы снижает процент заполнивших её людей, особенно на мобильных устройствах, где мелкие элементы и медленное соединение превращают простую капчу в раздражающее препятствие. Чем сложнее задание, тем больше людей закрывают форму, не дойдя до конца.
| Решение | Видимость для пользователя | Внедрение | Эффективность |
| reCAPTCHA v2 | Видна, чекбокс или задание | Простое, готовый плагин | Средняя, боты научились обходить |
| reCAPTCHA v3 | Невидима для человека | Нужна настройка порога оценки | Высокая для веб-форм |
| Яндекс SmartCaptcha | Видна только подозрительным | Простое, API и готовые модули | Высокая, хорошо подходит для рунета |
| Cloudflare Turnstile | Практически невидима | Простое, бесплатный тариф | Высокая, низкая нагрузка на UX |
На вопрос, какая капча лучше - reCAPTCHA или SmartCaptcha, однозначного ответа нет: для международных проектов удобнее reCAPTCHA v3 из-за распространённости, а для аудитории из России практичнее SmartCaptcha, которая не зависит от доступности зарубежных сервисов. Если же капча раздражает пользователей и хочется обойтись без неё - это реально: следующий способ фильтрации вообще не показывает человеку никаких заданий.
Honeypot и скрытые поля без капчи
Honeypot (в переводе «горшочек с мёдом») - это скрытое поле в форме, невидимое для обычного посетителя, но доступное для автоматических скриптов, которые читают весь HTML-код страницы подряд. Реальный пользователь его просто не видит и оставляет незаполненным, а спам-бот, который заполняет все найденные поля без разбора, автоматически вписывает туда текст - поэтому и ловится.
Здесь важна одна деталь, на которой многие ошибаются. Поле нельзя скрывать через type="hidden" - такие поля браузерные автозаполнители иногда трогают, подставляя туда сохранённые данные, и это сбивает логику фильтра. Правильный способ - скрыть поле через CSS, например сдвинуть за пределы экрана или сделать прозрачным и нулевого размера.
К CSS-скрытию стоит добавить атрибут aria-hidden="true" и tabindex="-1". Это не просто техническая мелочь: признак aria-hidden делает скрытое поле недоступным для скринридеров - программ, которыми незрячие пользователи читают страницу вслух. Без этого атрибута скринридер может озвучить поле и предложить его заполнить, что ломает доступность формы для части аудитории.
Имя поля стоит периодически менять или настраивать несколько вариантов одновременно (вроде "email_confirm", "website_url", "phone_alt") - боты часто ищут типовые названия полей, и ротация имён не даёт им обходить защиту по шаблонному имени. Полезно также проверять время заполнения поля изображений или дополнительных блоков формы, если они есть - лишняя активность там тоже выдаёт автоматический скрипт.
Сделать honeypot правильно - значит добавить скрытое через CSS поле с нейтральным именем, атрибутами aria-hidden и tabindex="-1", и на сервере отбрасывать любую отправку, где это поле оказалось заполненным. Защита формы от спама без капчи строится именно на такой комбинации: она не требует от человека никаких действий и работает незаметно. Комбинация honeypot и ограничения по частоте запросов повышает процент отсечённого спама ещё сильнее - о таком ограничении дальше.
Проверка времени, rate limiting и серверная валидация
Rate limiting - это ограничение количества отправок формы с одного IP или номера телефона за промежуток времени. Нужен он, чтобы один и тот же бот или скрипт не мог заливать форму десятками запросов подряд: даже если он обошёл капчу и honeypot, частота его обращений выдаёт автоматику.
На практике разумный порог - не больше 2-3 отправок с одного IP за несколько минут для формы заявки на небольшом сайте. Слишком жёсткий лимит рискует заблокировать живых пользователей за одной сетью, например в офисе или вузе, поэтому обычно речь идёт о временной блокировке IP-адреса на несколько минут, а не о постоянной - значения лучше подбирать исходя из реальной частоты обращений на конкретном сайте.
Отдельно стоит защитить саму временную метку формы. HMAC-подпись временной метки - это способ подтвердить на сервере, что значение времени, с которым пришла форма, не было подменено на клиенте: подпись формируется секретным ключом и проверяется при получении данных. Без такой подписи бот может просто прописать в запросе нужное время заполнения и обойти проверку "менее 3 секунд - подозрительно".
Здесь стоит честно сказать: чисто клиентской JavaScript-проверки недостаточно. Любой скрипт на странице можно обойти прямым запросом к обработчику формы, минуя фронтенд целиком - боты так и делают, отправляя данные напрямую на URL обработки. Поэтому серверная валидация данных обязательна: именно она предотвращает обход защиты, а не красивая проверка в браузере.
Смежная мера - CSRF-токен (от англ. cross-site request forgery, «подделка межсайтового запроса»), уникальное значение, которое подтверждает, что запрос пришёл с легитимной страницы сайта, а не со стороннего ресурса. Он не против спам-ботов напрямую, но закрывает похожую уязвимость и обычно идёт в комплекте с остальной серверной защитой формы.
Что такое rate limiting и зачем он форме - короткий ответ: это ограничение скорости отправок с одного источника, которое ловит боты даже после того, как они прошли капчу и honeypot. В сумме все эти уровни - капча или её альтернатива, скрытое поле, проверка времени с подписью и ограничение частоты запросов - работают как фильтры один за другим, а не как единственное решение.
Защита по CMS: WordPress, Tilda, Битрикс, самописные формы

Готовые решения зависят от CMS, на которой стоит сайт. У WordPress самый большой выбор плагинов, у Tilda и Битрикс защита встроена в конструктор или модуль, а на самописном сайте придётся собирать защиту руками из приёмов, разобранных выше.
Для WordPress есть два проверенных плагина. WordPress-плагин Akismet проверяет комментарии и формы на спам по базе известных спам-паттернов - подходит для блогов с активными комментариями. CleanTalk анализирует соответствие сообщения тематике сайта в облаке и дополнительно умеет фильтровать одноразовые домены email, блокируя временные почтовые адреса ещё до попадания заявки в базу.
Раз уже укрепляете WordPress от ботов, полезно заодно закрыть вход в административную панель. Я сам пользуюсь Clearfy - он стоит на этом блоге. Это не защита форм от спама напрямую, а базовая безопасность логина: смена страницы входа, лимит попыток входа, скрытие ошибок входа и отключение REST API. Плюс минификация HTML для скорости. Подключить и настроить - дело пяти минут, нужен только доступ в кабинет администратора.
В Tilda настройка проще: капча включается прямо в настройках форм без установки сторонних модулей. Этого обычно достаточно для лендингов - Tilda не рассчитана на формы с высокой посещаемостью, где нужна многоступенчатая защита.
В 1С-Битрикс за защиту отвечает модуль «Проактивная защита» - он включает встроенную Bitrix CAPTCHA и дополнительные правила фильтрации запросов. Модуль настраивается в административной панели, поддержка Битрикс обновляет его базы сигнатур атак вместе с ядром платформы - отдельно обновлять не нужно.
На самописном сайте никакой готовый плагин не подходит - там защита собирается кодом: honeypot с aria-hidden, проверка времени заполнения, rate limiting по IP и blacklist (чёрный список) IP-адресов, который блокирует повторные отправки с одного источника спама. Это тот же алгоритм, что и в готовых решениях, только без интерфейса настроек - всё в коде обработчика формы.
Частые ошибки при защите форм
Какие ошибки чаще всего допускают при защите форм? Главная - ставка на один метод защиты вместо комбинации нескольких. Только капча или только honeypot по отдельности пропускают заметную долю спама: капчу обходят сервисы распознавания, а одиночный honeypot без других проверок не держит целенаправленную атаку.
Вторая частая ошибка - неправильный honeypot. Если скрытое поле верстать просто через display:none без атрибута aria-hidden, скринридер всё равно объявит его - это вредит доступности сайта для пользователей с нарушением зрения. Правильный honeypot скрывается так, чтобы его не видели ни люди, ни вспомогательные технологии, но боты всех видов его заполняют.
Третья ошибка - игнорирование второстепенных форм. Защищают обычно форму обратной связи, а подписку на рассылки, комментарии и регистрацию оставляют открытыми. Спамеры находят именно такие формы быстрее - по ним реже проверяют правила, и туда льются подозрительные заявки с вредоносными ссылками в тексте.
Четвёртая ошибка - отсутствие логирования. Без логов не видно, что форму вообще атакуют: заявки просто копятся в почте или CRM, а источник проблемы остаётся неясным. Логирование IP, времени отправки и сработавших правил защиты позволяет быстро понять, что фильтры работают неэффективно и пора их усиливать, а не обходить проблему молчанием.
Любого из этих четырёх промахов достаточно, чтобы защита формы держалась только для вида, а реальный поток спама продолжал идти в CRM практически без изменений.
Пошаговый план внедрения защиты за один день
Собрать базовую защиту формы помогает чёткая последовательность - все инструменты из статьи встают в план за несколько часов работы, без привлечения отдельного специалиста по безопасности.
- Добавьте honeypot-поле с aria-hidden - это бесплатно и закрывает большую часть простых ботов сразу.
- Включите проверку времени заполнения с HMAC-подписью токена, чтобы её не подделали на стороне бота.
- Настройте rate limiting по IP - лимит на число отправок с одного адреса за минуту.
- Для самых атакуемых форм подключите капчу или сервис SmartCaptcha/Turnstile - это автоматически отфильтрует оставшийся трафик ботов без лишних кликов для живых пользователей.
- Настройте фильтрацию подозрительных заявок в CRM или почте по email-доменам и ключевым словам, чтобы заблокировать то, что прошло мимо технических фильтров. Этот же набор правил позволяет защитить таким образом не только форму заявки, но и подписку на рассылки, комментарии и регистрацию.
Этого набора хватает для подавляющего большинства сайтов малого и среднего бизнеса. Но есть границы: при очень высокой посещаемости формы или при целевой атаке конкурентов самописные решения начинают требовать постоянной доработки правил. В таких случаях разумнее подключить платный антибот-сервис уровня CleanTalk - он берёт на себя облачную базу сигнатур и обновляет её без участия разработчика. Начинайте с бесплатного набора из этого плана, а к платному решению переходите, когда увидите в логах рост числа обходов - не раньше.
Данная статья основана на личном опыте автора и актуальна на момент публикации. Интерфейсы сервисов и алгоритмы поисковых систем регулярно меняются - рекомендую проверять актуальность инструкций на официальных ресурсах. Если у вас остались вопросы - задайте их в комментариях.
Список литературы
- Google - Invisible reCAPTCHA // Google reCAPTCHA Docs, 2024 // developers.google.com
- Яндекс - SmartCaptcha: документация сервиса // Yandex Cloud Docs, 2025
- Федеральный закон от 27.07.2006 №152-ФЗ «О персональных данных»











