Hushfort

Как защитить форму обратной связи в WordPress от спама без капчи?

Автор: Eureka Studio · Обновлено

Коротко

Вместо капчи (CAPTCHA) сочетайте невидимые проверки: скрытое поле-ловушку (honeypot), которое заполняют только боты, минимальное время заполнения, токен, который переживает кэширование страниц, и лимиты на IP и на email. Сомнительные сообщения отправляйте в карантин, а не удаляйте. Локальный плагин может делать это для Elementor, Contact Form 7 и WPForms, никуда не отправляя данные. В Hushfort защита плагинов форм входит в Pro; бесплатный плагин охватывает только комментарии и отзывы.

Шаги

  1. 1Шаг 1

    Посмотрите, как боты атакуют вашу форму

    Боты заполняют все поля, которые находят, включая скрытое, которого человек никогда не видит, или отправляют данные вовсе не загружая страницу. Журнал Hushfort называет каждый случай: заполнено поле-ловушка, нет токена, заполнено слишком быстро, слишком много ссылок.

    Таблица «Журнал и карантин» модуля «Защита от спама» с записями контактной формы WPForms: нет токена, превышен лимит на IP, заполнено поле-ловушка, слишком много ссылок
  2. 2Шаг 2

    Включите «Защиту от спама» в режиме наблюдения

    В Hushfort откройте «Защиту от спама», включите её и выберите в поле «Режим» вариант «Только записывать — режим наблюдения, ничего не блокирует». Если установлен Hushfort Pro, оставьте «Плагины форм» включёнными и сохраните. Модуль будет записывать то, что заблокировал бы, но пока ничего не блокирует.

    «Защита от спама» включена, «Режим» установлен в «Только записывать — режим наблюдения, ничего не блокирует»
  3. 3Шаг 3

    Настройте незаметные лимиты (Pro)

    Оставьте «Минимальное время заполнения» коротким (3 секунды). В Pro также ограничьте, сколько сообщений в час может отправить один IP («Лимит на IP») или один email-адрес («Лимит на email»). Сообщения, в которых ссылок больше, чем «Максимум ссылок», попадают в карантин.

    Лимиты «Защиты от спама»: минимальное время заполнения 3 секунды, лимит на IP 5 в час, лимит на email 3 в час, максимум ссылок 2
  4. 4Шаг 4

    Просмотрите журнал и переключитесь на блокировку

    Через несколько дней посмотрите, что поймал режим наблюдения. Если настоящих сообщений там нет, выберите в поле «Режим» вариант «Блокировать (рекомендуется)» и сохраните.

    «Режим» в «Защите от спама» изменён с «Только записывать» на «Блокировать (рекомендуется)» и сохранён
  5. 5Шаг 5

    Живые люди просто отправляют

    Посетитель полминуты набирает текст, не видит скрытого поля и отправляет сообщение. Никаких головоломок и сеток с картинками.

    Посетитель заполняет контактную форму демо-магазина и отправляет её; форма отвечает «Спасибо за сообщение»

Почему это важно

Защитить форму обратной связи в WordPress от спама можно без капчи: невидимое поле-ловушка (honeypot), минимальное время заполнения, токен, который переживает кэширование страниц, и лимиты на IP и email отсекают ботов, не мешая людям. Сомнительные сообщения лучше отправлять в карантин, а не удалять.

Спам в формах — в основном просто досадная помеха, пока не становится чем-то большим. Он хоронит настоящие обращения, приучает вас пробегать почту глазами и может испортить репутацию вашего почтового сервера, если форма отправляет автоответы. На нагруженных сайтах он ещё и отнимает ресурсы сервера, ведь каждая отправка проходит полную обработку в плагине форм.

Обычное решение — CAPTCHA — перекладывает издержки на посетителей. Они решают головоломки, кто-то сдаётся, а те, кто пользуется инструментами защиты приватности, застревают. Большинство сервисов CAPTCHA к тому же загружают сторонний код и отправляют данные посетителей за пределы вашего сервера.

Есть способ потише. Боты ведут себя не так, как люди, и это можно незаметно проверить:

  • Они заполняют скрытые поля. Honeypot — это поле, скрытое от людей, но видимое в HTML. Человек оставляет его пустым, бот — заполняет.
  • Они быстрые. Человеку на заполнение формы нужно несколько секунд, боту — миллисекунды.
  • Они повторяются. Один IP или один email-адрес, с которого приходит десять сообщений в час, — не клиент.
  • Они вставляют ссылки. Сообщение с кучей ссылок редко бывает настоящим обращением.

Частые ошибки

  • Блокировать вместо карантина. Если проверка не уверена, сохраняйте сообщение для проверки. Удалить вопрос реального клиента хуже, чем прочитать один спам.
  • Сразу переходить к блокировке. Начните с режима «только записывать» на несколько дней. Проверьте, что было бы заблокировано, прежде чем разрешать блокировку.
  • Токены, которые ломаются из-за кэширования. Если антиспам-токен — часть кэшированной страницы, все посетители делят один просроченный токен. Используйте защиту, которая получает токен при загрузке страницы.
  • Только одна проверка. Одно поле-ловушка останавливает лишь простых ботов. Добавьте проверку времени заполнения и лимиты.

Без плагина

В большинстве плагинов форм уже есть базовая версия такой защиты:

  • Формы Elementor Pro: добавьте поле «Honeypot» из списка полей.
  • Contact Form 7: honeypot добавляется через дополнение; CF7 также поддерживает Akismet, если вы согласны отправлять данные этому сервису.
  • WPForms: есть встроенный антиспам-токен и необязательный honeypot в настройках каждой формы.

В любую форму, которую вы контролируете, можно вручную добавить простое поле-ловушку:

<div style="position:absolute;left:-9999px" aria-hidden="true">
  <label>Leave this empty <input type="text" name="website" tabindex="-1" autocomplete="off"></label>
</div>
<?php
if ( ! empty( $_POST['website'] ) ) {
    wp_die( 'Spam detected.', 403 );
}

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

Если что-то пошло не так

  • Перестали приходить настоящие сообщения. Переключите «Защиту от спама» в режим наблюдения, отправьте тестовое сообщение и посмотрите в журнале, какая проверка его поймала.
  • Формы не работают только у части посетителей. После включения защиты один раз очистите кэш страниц.
  • Спам всё равно проходит. Уменьшите лимит ссылок, добавьте слова или домены в чёрный список или включите строгий режим для форм, которые должны принимать только известные почтовые сервисы.

С Hushfort

«Защита от спама» в Hushfort Security — бесплатном плагине безопасности для WordPress — защищает комментарии и отзывы WooCommerce в бесплатном плагине. Для плагинов форм нужен Hushfort Pro: он добавляет на тот же экран шесть популярных (Elementor Pro, Contact Form 7, WPForms, Gravity Forms, Fluent Forms, Forminator).

  • Невидимое поле-ловушка, минимальное время заполнения и подписанные токены, которые переживают кэширование страниц. Токен выдаёт крошечный скрипт размером около 2 КБ без cookie.
  • Pro: по умолчанию лимиты на IP (5 в час) и на email (3 в час); сообщения, в которых больше 2 ссылок, попадают в карантин.
  • Pro: список примерно из 9 900 доменов одноразовой почты, ваши собственные чёрные списки и фильтры слов.
  • Pro: карантин с обучением по кнопке «Не спам».
  • Есть режим наблюдения: вы видите, что модуль заблокировал бы, ещё до того, как он начнёт блокировать.

Никакой CAPTCHA, никаких внешних API, и данные форм никогда не покидают ваш сервер.

Частые вопросы

Действительно ли поля-ловушки останавливают спам в формах?

Они останавливают большинство автоматических ботов, которые заполняют все найденные поля. Некоторые более хитрые боты пропускают скрытые поля — поэтому за ловушкой стоят проверка времени заполнения и лимиты на IP.

Почему стоит отказаться от reCAPTCHA?

Она создаёт неудобства для реальных посетителей, может не срабатывать у людей с инструментами защиты приватности и отправляет данные посетителей третьей стороне. Многие владельцы сайтов также считают, что из-за неё нужно уведомление о cookie.

Работает ли это с кэшированием страниц?

Да, если токен запрашивается при загрузке страницы, а не вшит в кэшированный HTML. Иначе все посетители получают один и тот же устаревший токен, и формы перестают работать.

Какие плагины форм поддерживаются?

В Hushfort Pro «Защита от спама» охватывает формы Elementor Pro, Contact Form 7, WPForms, Gravity Forms, Fluent Forms и Forminator. Бесплатный плагин охватывает только комментарии и отзывы WooCommerce.

Что происходит с сообщением, которое похоже на спам, но может быть настоящим?

В Hushfort Pro оно попадает в карантин, а не удаляется. Отметьте его «Не спам» — и оно будет доставлено, а защита учтёт это на будущее.

Сообщить об ошибке или предложить функцию

Ваше сообщение попадёт прямо к команде, которая разрабатывает Hushfort.

О чём сообщение?

Используется только для ответа вам.

Мы используем эти данные только для ответа вам. Конфиденциальность