Форма на сайте собирает спам: что с этим делать без капчи

Капча отсекает ботов и заодно часть живых клиентов. Показываю три ловушки, которые работают тихо: посетитель их не видит, а бот на них попадается.

Как только сайт попадает в индекс, его находят рассыльщики. Выглядит это узнаваемо: «Hello, I came across your business online», предложения продвинуть сайт, зарегистрировать его в каталогах и ссылка прямо в поле «Имя».

Само по себе это не страшно — три письма в неделю можно удалять руками. Плохо становится, когда спама двадцать в день и настоящая заявка теряется среди него.

Почему я не ставлю капчу

Капча работает — и заодно отсекает часть настоящих клиентов. Человек, который и так не был уверен, писать вам или не писать, после третьей неугаданной картинки закрывает вкладку. Для сайта, где заявок немного и каждая дорога, это плохой размен.

Плюс капча — это чужой скрипт с чужого сервера: минус к скорости и лишняя передача данных о посетителе, которую надо описывать в политике.

Три ловушки, которые работают тихо

1. Скрытое поле-приманка

В форму добавляется обычное на вид поле — например, «сайт компании» — и убирается с экрана стилями. Человек его не видит и не может заполнить. Бот читает разметку, находит поле и заполняет всё подряд, потому что не знает, какое поле обязательное.

Заполнено — значит бот. Простая и на удивление эффективная проверка против массовых рассылок.

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

2. Проверка времени заполнения

Человек читает подписи, печатает имя и телефон — на это уходят секунды. Бот отправляет форму в ту же секунду, когда открыл страницу.

При отрисовке формы в неё кладётся метка времени. Если между открытием и отправкой прошло меньше нескольких секунд — это не человек.

Тонкость: метку нужно подписать ключом сайта, иначе бот подставит в неё любое значение. Подпись бот подделать не может, не зная ключа.

3. Ссылка в поле «Имя»

Почерк рассылок: адрес сайта прямо в имени отправителя. Живой человек так не пишет.

А вот в поле «Сообщение» ссылки запрещать нельзя — клиент как раз присылает адрес своего текущего сайта, и это самая полезная заявка из возможных. Разница между этими двумя полями важнее, чем кажется.

Чего делать не стоит

  • Прятать поле только через display:none. Часть ботов такие поля пропускает. Надёжнее увести за пределы экрана.
  • Объяснять боту, на чём он попался. Сообщение об ошибке должно быть одинаковым для всех случаев, иначе рассыльщик подстроится.
  • Фильтровать по языку сообщения. Кажется соблазнительным отсекать письма без кириллицы, но так однажды потеряется настоящий клиент.

Что это дало

Три ловушки закрывают массовые автоматические рассылки — то есть почти весь спам, который приходит на небольшой сайт. Целенаправленную отправку руками они не остановят, но её и не бывает в количествах, мешающих работать.

Всё это невидимо для посетителя: форма выглядит и заполняется ровно так же, как раньше.

С чем могу помочь

Ещё в блоге

Обсудить задачу Все статьи