Contact Form 7 — самый популярный плагин форм для WordPress, и у этой популярности есть обратная сторона: боты знают его лучше всех. Стоит опубликовать форму — и через пару дней почта забита мусором. Contact Form спам (или, как часто пишут, contact form spam) — это не редкость, а почти гарантированный сценарий, потому что в базовой версии плагина нет никакой защиты вообще.
В этой статье честно разберём все рабочие способы защиты Contact Form 7 от ботов — honeypot, Akismet, quiz, reCAPTCHA — с их плюсами и, что важнее, с их слабыми местами. А в конце покажем, почему часть спама обходит их все и как закрыть эту дыру.
Contact Form 7 спам: почему форма его притягивает
Причина в устройстве плагина. Contact Form 7 намеренно минималистичен — он даёт голую форму и ничего лишнего. Это удобно для разработчика, но означает, что:
- форма принимает любую отправку без проверок;
- адрес обработчика формы предсказуем и одинаков на миллионах сайтов;
- боты автоматически находят формы CF7 и шлют в них мусор пачками.
Поэтому contact form боты — это не чья-то целенаправленная атака, а фоновый автоматический шум, который идёт на любую открытую форму. Те же боты бьют и по разделу contact form комментарии, если на сайте включены обсуждения, — механизм один и тот же. Защита нужна практически сразу.
Contact Form защита, способ 1: honeypot — невидимая ловушка
Плагин Honeypot for Contact Form 7 добавляет в форму скрытое поле, невидимое живому человеку, но видимое боту, который заполняет все поля подряд. Если ловушка заполнена — отправка блокируется.
Плюсы: незаметен для посетителей, не портит UX, почти не грузит сайт, работает без капчи.
Минусы: ловит только примитивных ботов. Продвинутые скрипты парсят форму и игнорируют скрытые поля. А главное — honeypot живёт в HTML-разметке страницы, поэтому против спама, который идёт прямым POST на обработчик формы в обход браузера, он бесполезен.
Способ 2. Akismet — облачная фильтрация контента
Akismet от создателей WordPress анализирует содержимое отправки по глобальной базе спама и помечает подозрительное. Для Contact Form 7 подключается тегами akismet:author и akismet:author_email в полях формы.
Плюсы: автоматизация, постоянно обновляемая база, минимум влияния на скорость.
Минусы: работает постфактум — отправка уже обработана, письмо может уйти, а запись создаётся и лишь потом метится как спам. Зависит от доступности облака Akismet. Даёт ложные срабатывания. Для коммерческого использования Akismet платный, а оплата из России сейчас проблематична.
Способ 3. Quiz — вопрос-проверка
Встроенная в Contact Form 7 функция [quiz] добавляет простой вопрос («Сколько будет 2+3?») с проверкой ответа. Плагины не нужны.
Плюсы: не требует установки ничего, минимальная нагрузка, понятен людям.
Минусы: статичный вопрос спамеры быстро узнают, и его приходится менять вручную. Умные боты решают простую арифметику. Это скорее «замок от честных людей», чем реальная защита.
Способ 4. reCAPTCHA — проверка Google
reCAPTCHA v3 подключается к CF7 отдельным плагином и оценивает «человечность» посетителя.
Плюсы: усложняет автоматизацию, отсекает многих ботов.
Минусы: бьёт по UX — часть живых посетителей отваливается на проверках, особенно с VPN или на мобильных. Это внешний сервис Google с передачей данных на его серверы. И, как honeypot, reCAPTCHA работает в браузере — спам прямым POST на endpoint она не видит.
Общая слабость всех этих методов
Обратите внимание на повторяющуюся оговорку выше. Honeypot, quiz и reCAPTCHA работают на уровне формы, в браузере. Akismet — на уровне контента, уже после приёма. Все они — последний рубеж: бот уже дошёл до вашего сайта, уже сгенерировал запрос, а его отбивают на финише.
Отсюда две системные дыры:
- Прямой POST на обработчик. Многие спам-боты не открывают вашу страницу в браузере вообще. Они шлют запрос напрямую на endpoint Contact Form 7 (файл-обработчик отправки). В этот момент нет ни отрисованного honeypot, ни выполненного JS reCAPTCHA — проверки, живущие в разметке, просто не срабатывают.
- Нагрузка остаётся. Даже когда Akismet пометит спам, запрос уже принят и обработан. Бот всё равно потратил ресурсы вашего сервера.
Поэтому связка «honeypot + Akismet» снижает поток, но не закрывает его полностью — часть contact form спам всё равно просачивается.
Способ 5. Фильтрация на входе — отсечь бота до формы
Принципиально другой подход: не ловить бота на форме, а не пускать его до формы. Плагин Анти Бот проверяет каждый запрос на входе — по стране, сети (ASN), IP и User-Agent — ещё до того, как тот доберётся до Contact Form 7.
Что это даёт именно против спама форм:
- Закрывает лазейку с прямым POST. Проверка срабатывает на уровне запроса, а не разметки, поэтому бот, который шлёт данные напрямую на обработчик в обход браузера, отсекается так же, как и обычный, — там, где honeypot и reCAPTCHA бессильны.
- Режет спам по источнику. Массовые рассылки идут с хостингов и дата-центров — их сети (ASN) блокируются целиком, одним правилом, ещё на подступах.
- Не трогает живых людей. Никаких капч для обычных посетителей: проверка показывается только подозрительному трафику, поэтому UX формы не страдает — это защита Contact Form без ущерба для конверсии.
- Снимает нагрузку. Бот отсекается до обработки, а не после, поэтому сервер не тратит ресурсы на мусорные отправки.
Важно: фильтрация на входе не конфликтует с honeypot или Akismet — она работает уровнем раньше. Их можно оставить как второй рубеж, но основную массу contact form боты отдаёт именно фильтр на входе.
Что выбрать под свою ситуацию
- Немного спама, простые боты. Honeypot + quiz закроют большинство. Быстро и бесплатно.
- Спам идёт потоком, honeypot не справляется. Добавьте фильтрацию на входе (Анти Бот) — она отсекает то, что просачивается мимо honeypot, включая прямой POST.
- Спам приходит даже с honeypot и reCAPTCHA. Это почти наверняка прямой POST на endpoint. Лечится только фильтрацией на уровне запроса, проверки в браузере тут не помогают.
- Важна конверсия, капча недопустима. Фильтрация на входе — защита Contact Form без единой капчи для живых посетителей.
Частые вопросы
Почему в Contact Form 7 столько спама?
Contact Form 7 минималистичен: в базовой версии нет никакой защиты от спама. Форма принимает любую отправку, а её адрес обработки предсказуем, поэтому боты быстро находят её и шлют мусор автоматически. Без дополнительных мер спам в Contact Form начинается почти сразу после публикации формы.
Honeypot защищает Contact Form 7 от ботов надёжно?
Honeypot ловит простых ботов, которые заполняют все поля подряд, включая скрытое. Но продвинутые боты парсят форму и игнорируют honeypot-поля, а часть спама вообще идёт в обход браузера — прямым POST на endpoint формы, где honeypot в разметке уже не играет роли. Как единственная защита honeypot ненадёжен.
Что лучше против спама — reCAPTCHA или honeypot?
У обоих есть цена. reCAPTCHA бьёт по удобству: живые посетители проходят проверки, часть отваливается, плюс это внешний сервис Google. Honeypot незаметен, но пропускает умных ботов. Оба работают на уровне формы — уже после того, как бот дошёл до сайта. Радикальнее отсечь бота до формы, фильтрацией трафика на входе.
Как остановить спам, который идёт мимо капчи?
Такой спам отправляется напрямую на обработчик формы, минуя браузер, поэтому reCAPTCHA и honeypot в разметке страницы его не касаются. Останавливается это фильтрацией на входе: запрос проверяется по стране, сети (ASN), IP и User-Agent до того, как дойдёт до Contact Form 7. Так работает плагин Анти Бот.
Можно ли защитить Contact Form 7 без капчи?
Да. Капча — не единственный путь. Honeypot и quiz-вопросы работают без reCAPTCHA, но пропускают часть ботов. Фильтрация на входе (по стране, ASN, IP) вообще не показывает проверок живым людям и при этом отсекает автоматический трафик — это защита Contact Form без ущерба для удобства посетителей.
Итог
Спам в Contact Form 7 неизбежен, пока форма ничем не прикрыта, но методов защиты хватает. Honeypot, Akismet, quiz и reCAPTCHA снижают поток — с оговоркой, что все они работают на последнем рубеже и каждый имеет слабое место: honeypot и капчу обходят прямым POST на обработчик, Akismet метит уже принятый спам, а reCAPTCHA бьёт по удобству посетителей.
Если contact form спам идёт потоком или просачивается даже сквозь honeypot и капчу — значит, пора закрывать причину, а не следствие. Фильтрация трафика на входе отсекает бота до того, как он доберётся до формы, включая тот спам, что летит мимо браузера. Как это устроено — смотрите на странице Анти Бот для WordPress: блокировка по странам, сетям и IP, защита форм без капчи и без нагрузки на сервер от мусорных отправок.