Борьба со спамом

Spam shall not pass!

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

Сайт, собственники которого уже буквально задыхались от «левых» писем, существует уже очень давно. По многим запросам сайт занимает первые строки в поисковой выдаче и несмотря на весьма устаревший дизайн приносит своим владельцам хороший доход. Но отделять каждый день мухи от котлет, когда на 10 реальных заказов приходит 100, а то и больше, писем спама, им надоело. Специалист по SEO-продвижению сайта спросил меня, можно ли как-то уменьшить поток нежелательной почты.

На сайте уже была установлена рекапча Гугла, но она совершенно не помогала. Первым моим порывом было просто обновить капчу, но когда я взглянул на код… Как я уже говорил, данный сайт не просто стар, он суперстар! Ну а если серьёзно, я был в тихом ужасе. Никаких вам фреймворков, CMS — самописный движок на php версии 5.3. Половина функций уже давно устарели, кодировка windows-1251, переменные, кои следовало вынести в отдельный конфиг, разбросаны по всему приложению, хостинг без SSH…

Я ругался, да что там, я матерился, мне не хотелось вообще что-то трогать на этом чудом работающим до сих пор сайте. Поняв что «простое обновление» Гугловской рекапчи может запросто всё тут сломать, я решил вместо этого использовать старый, но проверенный временем, способ дать роботам от ворот поворот.

А способ действительно элементарный. Боты, как правило, проставляют в формах все галочки, чтобы пройти проверки на согласие с политикой конфиденциальности и т.п. Поэтому к каждой форме мы прикрепляем чекбокс и скрываем его с помощью CSS. Нормальный человек никакого поля для галочки не видит и соответственно её никогда не поставит. А вот робот… Этот, поставит галку наверняка.

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

Чтобы подстраховаться я решил не ограничиваться одной ловушкой и поставил вторую, столь же простую, но эффективную.

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

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

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

Прошел почти месяц, я поинтересовался итогом работы и услышал приятную весть, цитирую: «спама не стало ваще!». Вот так вот, иногда старые, дедовские способы защиты от ботов работают лучше хваленных рекапч от всемирно известной компании.