Как защитить форму от спам-ботов: подробное руководство
LeadPlan | Лидогенерация — читать 4 мин.
Если вы замечаете стихийный рост базы данных сайта или подозреваете, что его взломали, — значит защита от спам-ботов не работает. Они добавляют в базу чужие адреса, ломают аналитику и портят рейтинг. Сайт виснет, пользователи жалуются, вы боитесь, что боты доберутся и до сервера. Нужно дать им бой!

Какой метод использовать и как отличить робота от человека? Какая защита уже не эффективна, а какая — самая надёжная? Об этом читайте в нашей статье.

Команда LeadPlan

07 февраля

2019 г.

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

Наш пример показывает, что от атаки спам-ботов не застрахован никто. Чем она обернётся, зависит от спамеров, которые на вас вышли. Вот некоторые последствия атаки спам-бота на сайт:

  • на почтовый ящик, который получает данные из формы, приходят письма со спамом;

  • качество базы подписчиков снижается: бывают случаи, когда подписчиков-ботов становится больше, чем подписчиков-людей, и это грозит ухудшением репутации;

  • портится статистика на сайте: новые пользователи появляются, а толку от них никакого;

  • большое количество запросов от ботов загружает сервер, из-за этого страницы открываются медленно;

  • боты ищут уязвимые места в коде и могут получить доступ к серверу;

  • на сайте появляются комментарии наподобие таких:
Такие комментарии отпугивают реальную аудиторию на сайте, и постепенно он умирает.

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

Так боты используют вашу хорошую репутацию. После такой атаки вполне реально попасть в чёрный список.
Нужна ли капча?
Капча (captcha) — типичный пример теста Тьюринга, который помогает отличить искусственный интеллект от человеческого.
Форматов много: можно заставить пользователей вводить странные сочетания букв, расшифровывать аудиосообщения, решать примеры или искать на фотографиях машины или дорожные знаки. Безопасно для владельца сайта, но очень раздражает пользователей, которые могут бросить форму на полпути.

Можно ли защитить форму без капчи? Конечно, можно.
Методы защиты формы от спама без капчи
У всех способов борьбы со спам-атаками есть общий недостаток: они устаревают. Как только вы придумываете новый метод защиты, разработчики ботов стараются найти в них лазейки, поэтому важно быть начеку. Ниже мы расскажем, какие способы ещё рабочие, а какие — уже ненадёжные.
Задать рамки на время заполнения формы
Роботы вводят данные моментально, в то время как человеку нужен какой-то отрезок времени, чтобы напечатать имя и email. По этой логике вы сможете отсекать ботов ещё на этапе заполнения полей.

Но не всё так просто: во многих браузерах есть функция автозаполнения форм. Пользователь не тратит время на ввод email, а значит, скрипт может посчитать его ботом. Вдобавок большинство ботов уже умеет заполнять формы с такой же скоростью, как это делает человек. Так что этот метод можно использовать как дополнение к остальным, но не рассчитывайте, что он отсечёт всех роботов в одиночку.
Добавить скрытое поле
Логика такая: человек видит на сайте два поля для ввода (имя и email). Хотя на самом деле есть третье поле, скрытое в коде.

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

Казалось бы, безотказный метод защиты. Но бот будет пытаться отправить данные через форму во всех возможных комбинациях: заполнять одни поля и оставлять другие пустыми, чередовать их содержимое и так далее. Так или иначе, он подберёт способ отправки данных и сломает вашу защиту, так что метод ненадёжный.
Блокировать user-agent
Спамеры используют специфические заголовки user-agent (идентификатор конкретного пользователя). В сети вы даже можете найти списки user-agent спам-ботов и заблокировать их заранее в файле htaccess. Но имейте ввиду, что полностью это вас не защитит. Боты умеют подделывать user-agent и успешно обходят эту блокировку.
Расставить «ловушки»
К примеру, приём скрытой ссылки. Человек её не видит, но в коде она есть. Бот проходит по этой ссылке, и тут-то вы блокируете его IP. Но имейте в виду, что если вы используете код ловушки, который нашли в интернете в открытом доступе, то она, скорее всего, работать не будет.

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

Например, существуют сервисы reCaptcha и invisible reCaptcha, которые поддерживает Google. А по запросу «recaptcha analog» можно найти множество платных и бесплатных аналогов в разном дизайне и функционале.

reCaptcha

Пользователю предлагают совершить минимальное действие: нужно только поставить галочку «Я не робот». Пример Disqus:
Когда пользователь нажимает на галочку, сайт проверяет репутацию его IP. Если с ней всё в порядке — данные, которые он ввёл в форму, отправляются в базу. Если репутация под сомнением — ему предлагают ввести капчу. И только после того, как человек ввёл правильные символы, он может отправить данные.

Invisible reCaptcha

Действует по такому же принципу, что и reCaptcha, с тем отличием, что пользователю не нужно нажимать «Я не робот». Его проверка на «человечность» начинается, когда он нажимает на кнопку отправки данных. То, что на сайте работает invisible reCaptcha, можно заметить по небольшой плитке с лого где-нибудь в углу страницы. Например, вот так она выглядит на «Авито».
Пользоваться LeadPlan
Подавляющее большинство сервисов защиты от спам-ботов обороняет уже отображённые на странице формы. Чтобы робот заполнил поля и нажал «Отправить», форма должна быть на странице. Если её нет — то и нечего отправлять, значит, бот уйдёт с сайта в поисках новой жертвы.

LeadPlan ещё при открытии страницы путём проверки IP и скрипта, о котором расскажем ниже, определяет, что клиент — бот, и просто не загружает ему форму. А если клиент — человек, то она загружается в обычном режиме.

Когда пользователь открывает сайт, запускается проверка на:

  • активность вкладки (у большинства ботов нет понятия «активная вкладка»);
  • user-agent (так отфильтровывается ещё часть сомнительных посетителей);
  • активности на странице (скролл, свайп, передвижение курсора).

Если активности нет, то скрипт не продолжает работать. Но как только фиксируются признаки «человечности», скрипт возобновляется. Без капчей, формул, пазлов, регистрации и смс.
Заключение
Как видите, не все популярные методы хороши. Самый надёжный щит от спам-ботов — это многоэтапная проверка на «человечность». В то же время большинство эффективных средств защиты всё-таки навязывают взаимодействие с пользователем: нужно что-то ввести или передвинуть.

В погоне за новыми способами защиты не забывайте о людях. Многих раздражает, когда их просят распознавать текст на смазанных картинках. Поэтому пускай проверка для человека проходит незаметно, например, через сервисы reCaptcha или LeadPlan.
Похожие статьи
LeadPlan | Лидогенерация | Маркетинг — читать 4 мин.
LeadPlan | Маркетинг — читать 4 мин.
LeadPlan | Маркетинг — читать 3 мин.