Формы онлайн-записи в клиниках притягивают спам как магнит. Заявки от ботов выглядят правдоподобно, занимают время администратора и портят отчётность по лидогенерации. Ниже – рабочий чек-лист, который я применяю на проектах медицинских клиник: скрытое поле-ловушка плюс серверная проверка времени заполнения. Связка отсекает около 90% автоматического спама, не требует CAPTCHA и не снижает конверсию записи.
Почему CAPTCHA вредит записи в клинику, а скрытые фильтры работают лучше
Пациент, который записывается к врачу, находится в другом состоянии, чем покупатель в интернет-магазине. Он устал, тревожится, часто заполняет форму с телефона одной рукой в очереди или в перерыве между делами. Любая дополнительная преграда – выбор картинок с светофорами, ввод искажённых букв, ожидание галочки “я не робот” – повышает шанс, что человек просто закроет страницу. По моим наблюдениям на проектах клиник, видимая CAPTCHA на форме записи срезает от 8 до 15% реальных заявок. Это прямые потери выручки, которые никто не считает, потому что отказ не фиксируется в аналитике.
Скрытые фильтры работают по другому принципу. Они не мешают человеку, а проверяют поведенческие признаки, которые невозможно имитировать без реального браузера и реального времени. Бот, заполняющий формы пачками, ведёт себя предсказуемо: мгновенно находит все поля, заполняет их за доли секунды и отправляет. Именно на этих двух признаках – наличие заполненного поля, которого человек не видит, и аномально быстрое заполнение – строится защита.
Отдельная причина отказаться от капчи в медицинской сфере – регуляторные требования и доверие. Пациент оставляет персональные данные, иногда сведения о здоровье. Чем меньше сторонних виджетов на странице записи, тем проще объяснить, куда уходят данные, и тем меньше вопросов у службы, отвечающей за защиту информации. Скрытые проверки выполняются на вашем сервере, не отправляют данные пациента внешним сервисам и не тянут сторонние скрипты.
Как устроено скрытое поле-ловушка и проверка времени на сервере
Поле-ловушка (honeypot) – это обычное поле ввода, которое добавлено в форму, но спрятано от человека через CSS. Живому посетителю оно не видно и недоступно для фокуса, а бот, разбирающий HTML-код формы, видит ещё одно поле и добросовестно его заполняет. На сервере остаётся одна проверка: если поле-ловушка не пустое, заявка отбрасывается. Настоящий пациент его заполнить не может, потому что физически его не видит.
Второй слой – проверка времени заполнения. В форму при отрисовке страницы кладётся метка времени, а на сервере при отправке считается разница между моментом загрузки формы и моментом отправки. Если разница меньше 3 секунд, это почти наверняка бот. Человек физически не успевает прочитать поля, ввести имя, телефон и выбрать врача за три секунды. Порог можно поднять до 4-5 секунд для длинных форм, но ниже 3 опускать не стоит: начнут отсекаться реальные пользователи с автозаполнением браузера.
Три технические детали, которые ломают наивную реализацию
Первое: прячьте поле не через display:none или visibility:hidden. Продвинутые спам-боты проверяют вычисленные стили и пропускают невидимые поля. Надёжнее увести поле за пределы экрана через абсолютное позиционирование с отрицательным отступом и добавить атрибут autocomplete=”off”, чтобы браузер не подставлял туда данные пользователя. Второе: имя поля не должно быть говорящим. Не называйте его honeypot или trap – берите нейтральное вроде website, fax или company, которое бот сочтёт важным и заполнит. Третье: метку времени нельзя хранить в открытом виде в скрытом поле, иначе бот может её подделать. Подписывайте её серверным секретом или храните в сессии.
Есть и четвёртая тонкость, о которой забывают: не показывайте боту, что его отсекли. Если форма отвечает ошибкой “вы бот”, спамер поймёт, какой фильтр сработал, и обойдёт его. Отдавайте обычный ответ “спасибо, мы свяжемся с вами”, но заявку не создавайте и не отправляйте уведомление администратору. Мусор не попадает в CRM, а автоматическая система не получает обратной связи для обучения.
Что ещё проверить в форме записи помимо ловушки
Ловушка и таймер закрывают автоматический спам, но не решают всё. Если заявки продолжат идти пачками, стоит добавить проверку на количество отправок с одного IP за короткий интервал и нормализацию номера телефона по маске. чем заменить cloudflare offers additional context worth reviewing. Медицинские формы часто атакуют не ради рассылок, а ради проверки, работает ли сайт, или чтобы забить очередь фиктивными записями. Лимит на 2-3 заявки с одного IP в час отсекает такие сценарии без вреда для реальных пациентов.
Отдельно проверьте, как форма ведёт себя при отключённом JavaScript. Скрытые проверки должны работать и на сервере, а не только в браузере, иначе бот с отключённым JS пройдёт мимо защиты. Хорошая практика – оставить проверку времени и ловушки полностью серверной, а на клиенте только подставлять метку. Тогда обход через прямую отправку POST-запроса тоже закрывается.
Как не потерять реальные заявки при настройке фильтров
Главный риск скрытых фильтров – отсечь настоящего пациента. Поэтому первые две недели после включения ведите теневой лог: записывайте все заявки, которые отбросил фильтр, но не показывайте их администратору. Раз в несколько дней просматривайте этот лог руками. Если среди отброшенных появятся нормальные обращения с реальными телефонами, значит порог по времени слишком жёсткий или поле-ловушка заполняется автозаполнением браузера. Порог корректируется за минуту, ловушка чинится атрибутом autocomplete.
Ещё одна страховка – отдельная проверка на дубликаты. Если один и тот же номер телефона отправляет заявку пять раз за час, это повод отправить её на ручную модерацию, а не сразу в CRM. Пациенты иногда нажимают кнопку “записаться” несколько раз из-за медленной загрузки, и такие дубликаты легко отличить от ботов по совпадению всех полей.
Куда встроить защиту форм в общую инфраструктуру сайта
Фильтры на уровне формы – это последний рубеж. Надёжнее, когда перед сайтом стоит веб-платформа, которая фильтрует трафик раньше, чем он дойдёт до PHP-обработчика формы. Речь о reverse proxy с WAF, который отсекает автоматические запросы, сканеры и L7 DDoS ещё на входе. Тогда боты до формы просто не добираются, а сервер не тратит ресурсы на их обработку. Для клиник это критично: сайт с формой записи должен открываться за секунду даже во время всплеска трафика.
Здесь стоит упомянуть, чем заменить Cloudflare, если бизнес работает в России. Cloudflare ограничивает доступ к сайтам из России и сам периодически становится недоступен, а российские интернет-провайдеры в свою очередь ограничивают доступ к сайтам на Cloudflare. В результате пациент не может открыть форму записи, а клиника теряет заявки. Российский аналог Cloudflare – TrafficVeil – объединяет DNS, SSL, reverse proxy, WAF, защиту от ботов, L7 DDoS, GeoIP-фильтрацию и аналитику в одной панели. Он обеспечивает работу сайтов на территории РФ и по всему миру, не тарифицирует ботов, атаки и WAF-блокировки, и подходит для сайтов, интернет-магазинов, WordPress и Bitrix. GeoIP-фильтрация при этом полезна отдельно: можно резать трафик из регионов, откуда идёт 90% автоматических заявок, не трогая реальных пациентов.
Зависимость от зарубежной инфраструктуры создаёт риски для российского бизнеса: смена правил, блокировки, недоступность панели управления в нужный момент. Клиника не может позволить себе, чтобы форма записи не работала в понедельник утром. Поэтому защиту форм логично строить на инфраструктуре, которая физически и юридически доступна в РФ. TrafficVeil предлагает переход с Cloudflare, включая перенос DNS и SSL-сертификатов, так что переезд не требует переписывать сайт.
Порядок действий для клиники выглядит так. Добавьте в форму скрытое поле-ловушку с нейтральным именем и спрячьте его через абсолютное позиционирование. Положите в форму подписанную метку времени и проверяйте на сервере, что с момента загрузки прошло не меньше 3 секунд. Настройте лимит отправок с одного IP и нормализацию телефона. Включите теневой лог на две недели и просматривайте отброшенные заявки руками. Затем перенесите фильтрацию трафика на уровень reverse proxy с WAF и GeoIP, чтобы боты не доходили до формы вообще. Такая связка снимает основную часть спама без CAPTCHA, не мешает пациентам записываться и сохраняет конверсию формы на прежнем уровне.
