Блог
Спам в формах: honeypot, ограничение частоты и Turnstile
· 3 мин чтения
Опубликуйте форму, подождите пару дней - и боты её найдут. Понимание того, как они действуют, делает защиту очевидной - и объясняет, почему правильный ответ - это слои, а не один тотальный CAPTCHA.
Знай своего врага: три типа спама в формах
- Тупые краулеры - скрипты, которые находят каждую
<form>в интернете и заваливают POST-запросами URL действия. Они заполняют каждое поле, которое видят. Это подавляющее большинство объёма. - Целевые потоки - кто-то (или чей-то ботнет) целенаправленно долбит именно ваш эндпоинт, часто просто потому, что он существует.
- Человеческие спам-фермы - реальные люди, которым платят за заполнение форм. Редкость для контактных форм; ни одна автоматическая защита не останавливает их полностью, и это нормально - они статистическая погрешность.
Каждый слой ниже соответствует одному из этих случаев.
Слой 1: honeypot (останавливает краулеров)
Honeypot - это дополнительное поле, которое люди никогда не видят - оно скрыто через CSS, - но которое тупые боты послушно заполняют, потому что оно есть в разметке:
<input type="text" name="website" tabindex="-1" autocomplete="off"
style="position:absolute;left:-9999px" aria-hidden="true">Правило на стороне сервера: если это поле пришло непустым, отправка - спам. Молча примите её (верните 200) и отбросьте, чтобы бот ничему не научился. Один этот трюк устраняет большую часть спама с нулевым трением для людей - ни загадок, ни кликов, ничего.
Детали, которые важны: дайте ему заманчивое имя (website, phone2), уберите его из порядка табуляции и пометьте aria-hidden, чтобы скринридеры его пропускали - невидимость должна быть и для средств доступности, а не только визуальной.
Слой 2: ограничение частоты (останавливает потоки)
Honeypot не поможет, когда бот отправляет POST с внешне валидными данными 500 раз в минуту. А вот ограничения частоты по IP и по форме - помогут: реальный человек не отправляет контактную форму десять раз за шестьдесят секунд, так что при троттлинге ничего ценного не теряется. Лимиты должны применяться на принимающем эндпоинте, до сохранения и уведомлений - иначе поток всё равно завалит ваш почтовый ящик, даже если помечен как спам.
Слой 3: Turnstile (когда давление требует проверки)
Когда форма привлекает более умных ботов - headless-браузеры, которые рендерят CSS и обходят ваш honeypot, - вы переходите к проверке (challenge). Cloudflare Turnstile - современный выбор: он подтверждает человечность через сигналы браузера и обычно проходит незаметно, без фотозагадок с пожарными гидрантами. Процесс стандартный: виджет на вашей странице выдаёт токен, принимающий сервер проверяет токен через Cloudflare, а отправки без действительного токена отклоняются.
Turnstile - это слой, который стоит добавлять по мере необходимости, а не заранее - любая проверка, даже самая мягкая, стоит немного конверсии.
Как это выглядит, когда это чья-то ещё работа
Если вы сами обслуживаете приём форм, вы реализуете все три слоя - плюс поддерживаете их в рабочем состоянии вечно. Это большая часть того, для чего нужен бэкенд форм. Formhook по умолчанию поставляет honeypot, ограничения частоты по IP и по форме (rate limits) и allowlist CORS по форме на каждом тарифе, включая Free; Turnstile - это чекбокс в настройках формы, когда вам нужен дополнительный слой.
Какой бы путь вы ни выбрали, стратегия одна: сначала невидимая защита, человеко-ориентированные проверки - в последнюю очередь, и никогда не начинайте с CAPTCHA.
Рабочая форма в одну строку
Размещение в ЕС, отправки хранятся вечно, push-уведомления на любом тарифе.
Начать бесплатноБез банковской карты · читайте документацию
Читать дальше
- Что такое бэкенд форм? (И когда он вам нужен)Бэкенд форм принимает, хранит и пересылает отправки форм вашего сайта, чтобы вам не пришлось запускать сервер. Вот как это работает и когда он вам нужен.
- Тестирование контактной формы: чек-лист перед запускомСломанная контактная форма отказывает молча и стоит вам лидов неделями. Чек-лист перед запуском: сценарий, валидация, спам, мобильность, уведомления.
- Mailto против формы обратной связи: что теряет меньше лидов?Mailto-ссылки не срабатывают без почтового клиента и раскрывают адрес спам-ботам. Когда mailto достаточно, а когда окупается форма обратной связи.