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

Как защитить форму на сайте от спама.
Изображение от Freepik.

Защита с помощью CAPTCHA

Самая распространенная защита форм от спама — это капча (captcha). Капчей называется одна из разновидностей теста Тьюринга, который предназначен для различения людей и роботов. Вы не раз сталкивались с ней при регистрации на различных ресурсах. Вспомните, как вас просили ввести буквы/цифры с искаженных картинок или отметить фотографии, на которых присутствуют пожарные гидранты. Это и есть captcha.

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

Тем не менее внедрить капчу на свой сайт — по-прежнему простой и рабочий способ защиты для форм обратной связи. Подключить ее можно бесплатно.

Бесплатные капча-сервисы: примеры

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

Вы можете воспользоваться специальными сервисами, которые предоставляют готовые варианты таких мини-тестов. Например:

  1. reCAPTCHA от Google. Можно использовать вторую версию (галочка «Я не робот») или третью, «невидимую», которая проводит незаметную проверку на основе поведения посетителя.
  2. hCAPTCHA. Бесплатный сервис, можно подключить к ВордПрессу, интегрировать с PHP, внедрить в Android-приложение.
  3. Akismet и другие плагины для WordPress.

Защита формы от спам-ботов без капчи

  1. Рамки на время заполнения формы.
  2. Скрытое поле.
  3. Блокировка user-agent.
  4. Cookies для проверки уникальности посетителя.
  5. Фильтрация входящих данных.

Ниже мы подробнее расскажем о каждом способе защиты.

№1. Рамки на время заполнения формы

Люди и боты по-разному взаимодействуют с полями обратной связи: первым обычно нужно больше времени, потому что они вводят данные постепенно нажимая на клавиши. Спамеры же заполняют форму моментально, не печатая. Эту разницу можно использовать в качестве основы для защитного скрипта. Суть метода в том, чтобы установить определенные временные ограничения на заполнение form-полей. Если посетитель вписал информацию быстрее, чем прописано в условии скрипта, то он будет считаться ботом и сообщение от него не будет принято.

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

№2. Скрытое поле

Как правило, роботы не выбирают, какие из полей в форме заполнять, а какие нет. Они автоматически вводят данные во все, чтобы не пропустить чек-боксы вроде «Я принимаю…». На этом и строится защита с помощью hidden-полей.

Алгоритм следующий: помимо стандартных «name», «email» нужно добавить дополнительное поле, например, «phone», и сделать его невидимым для пользователей. Для этого ему через стили присваивается атрибут display:none (он не принципиален, можно скрыть и другим способом, если умеете). В итоге обратная связь поступает в двух видах: реальная через открытые поля и спам через hidden. Пропишите условие, что делать с информацией во втором случае: например, вывести на страницу ошибку или, наоборот, сделать вид, что форма отправлена, но не принимать ее, чтобы запутать бота. Таким способом можно вполне успешно защищать сайт от мусорных спам-запросов. Правда, многие боты будут пытаться отправить данные во всех возможных вариантах, тогда потребуются другие инструменты противодействия.

№3. Блокировка user-agent

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

№4. Cookies для проверки уникальности посетителя

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

№5. Фильтрация входящих данных

Фильтровать данные, отправляемые через форму обратной связи, необходимо не столько для защиты от спама, сколько для исключения других опасных атак вроде SQL-инъекций. Но качественная валидация сумеет защитить и от простеньких ботов, которые заполняют поля случайными значениями. Задайте для данных конкретный формат, и тогда они элементарно не смогут выполнить условие.

Фильтрация входящих данных.
Изображение от Freepik.

Заключение

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