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

В начале ноября мне в Telegram пришла заявка с моего же сайта. Имя, телефон, пара строк и просьба написать в WhatsApp. Обычная заявка, если не знать, что форму стерегут несколько ловушек и капча от Яндекса. Бот прошёл их все. Через четыре дня пришёл снова, с того же адреса, и опять прошёл.
Расскажу, как устроена защита формы, почему капча больше не спасает и что я в итоге сделал. В конце короткий список: что проверить у себя, даже если сайтом занимается подрядчик.
Почему спам в форме не мелочь
Пока таких заявок пара в месяц, это кажется досадной помехой: удалил и забыл. Проблемы начинаются, когда их становится больше.
- Живая заявка тонет. Менеджер привыкает, что из формы приходит мусор, и смотрит туда всё реже. Настоящий клиент ждёт ответа сутки и уходит к тем, кто перезвонил через час.
- Реклама учится на ботах. Отправка формы обычно засчитывается в Метрике как цель, а Директ по этой цели решает, кому показывать объявления. Каждая бот-заявка для него успех, и он ищет ещё таких «клиентов».
- Отвечать опасно. Ответ в мессенджер подтверждает, что номер живой и за ним сидит человек, который читает сообщения. Дальше будет больше.
- Чужой номер в заявке. Бывает, что бот вписывает телефон постороннего человека. Вы перезваниваете, человек не понимает, откуда у вас его номер, и разговор выходит неловким.
Как обычно защищают форму
На моём сайте форма стоит за несколькими слоями. Человеку ни один из них не мешает, а вместе они отсекают почти всех ботов.
- Невидимое поле. В форме есть поле, которого человек не видит. Простой бот заполняет всё подряд и выдаёт себя.
- Время на странице. Человек тратит на заполнение хотя бы несколько секунд, скрипт отправляет форму мгновенно.
- Лимит отправок. С одного адреса нельзя отправлять заявки одну за другой.
- Проверка содержимого. Текст, набитый ссылками, даже не рассматривается.
- Проверка источника. Заявка должна прийти со страницы сайта, а не напрямую на сервер.
- Невидимая капча Яндекса. Она оценивает поведение посетителя и показывает задание, только если что-то заподозрила.
И одна хитрость: если сервер решил, что пишет бот, он всё равно отвечает «спасибо, заявка принята». Бот уходит довольный и не пробует снова с другими настройками. А заявка никуда не отправляется.
Против простых ботов эти слои работают годами. Мой бот простым не был.
Что было не так с этим ботом
Когда что-то проходит сквозь защиту, первым делом смотрю журналы сервера. В них виден каждый шаг посетителя.
Это был не скрипт, а настоящий браузер Chrome, которым управляла программа. Он открыл главную, загрузил стили и картинки, как обычный посетитель, за пару секунд заглянул во все разделы, полминуты провёл на странице и только потом отправил форму. Невидимое поле не тронул, время выдержал, капчу прошёл: для неё он выглядел как человек.
Выдал его адрес. Он пришёл не из домашней сети и не с мобильного, а из московского дата-центра, где стоят серверы, а не люди. И оба раза с одного и того же адреса.
Капча отвечает на вопрос «похоже ли это на человека». Про браузер, которым управляет программа, ответ всё чаще «да».
Такие боты дороже простых, но при рассылке по тысячам сайтов окупаются. И их будет больше: управлять браузером сегодня умеют даже нейросети.
Что я сделал
Молча удалять всё подозрительное я не стал. Выкинуть по ошибке живого клиента дороже, чем прочитать лишнюю заявку.
- Помечаю, а не выбрасываю. Если в имени или сообщении есть просьба писать в WhatsApp, типичная примета этой рассылки, заявка всё равно приходит, но с пометкой «похоже на спам». Поле для контакта не проверяю: «WhatsApp +7…» там пишут и обычные люди.
- Записываю каждую заявку. Теперь по каждой доставленной в журнале остаётся адрес, результат капчи и куда она ушла. Без имени, телефона и текста: персональным данным в журналах не место. Во второй раз хватило одной строки, чтобы понять, что это тот же гость.
- Закрываю сеть, а не адрес. Когда бот вернулся, я закрыл для сайта всю сеть того дата-центра. Не один адрес, а весь блок: хозяину бота ничего не стоит сменить адрес на соседний.
На другом сайте, который я веду, в сентябре было похоже: бот за несколько дней сменил три разных хостинга. Каждый раз помогала не капча, а блокировка сети, откуда он пришёл.
Чего делать не стоит
- Ставить капчу с картинками на каждую отправку. Бота в браузере она остановит не всегда, а живых клиентов отсеет: выбирать автобусы на картинках с телефона не любит никто.
- Убирать форму и оставлять только телефон. Спам уйдёт в звонки и мессенджеры, а клиенты, которым удобнее написать, уйдут к конкурентам.
- Блокировать целые страны. Ваши клиенты ездят в отпуск, сидят через VPN и работают из-за границы.
- Отвечать на подозрительную заявку, «чтобы проверить».
Что проверить у себя
Даже если сайтом занимается подрядчик, эти вопросы можно задать ему за пять минут.
- Куда приходят заявки. Если только на почту, одно письмо в папке «Спам», и клиент потерян. У меня каждая заявка уходит параллельно в Telegram, в MAX и на почту.
- Видна ли ваша почта ботам. Откройте страницу контактов, нажмите правой кнопкой «Просмотр кода страницы» и поищите свой адрес. Если он там открытым текстом, его давно собрали, и спам на почту идёт отсюда.
- Есть ли у формы защита, кроме капчи. Хотя бы невидимое поле и проверка времени.
- Ведётся ли журнал заявок. Без него на вопрос «откуда это пришло» никто не ответит.
- Что считает Метрика. Сверьте число целей «заявка» за месяц с числом настоящих обращений. Большая разница означает, что реклама учится на мусоре.
Коротко
Капча это один слой, а не защита. Форму защищает связка: несколько ловушек, журнал и человек, который туда заглядывает. Ботов, похожих на людей, будет больше, и выигрывает тот, кто замечает их раньше, чем они испортят рекламу.