WordPress антиспам

Как защитить сайт на wordpress от спама в комментариях?

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

Но обо всём по-порядку. Чтобы сделать защиту, надо понимать от чего защищаться. Я провёл небольшой эксперимент: подобрал парочку wordpress сайтов, куда ежесуточно приходило 5-10 спам комментариев и провёл некоторый анализ действий спамеров. Для получения данных я добавил на форму для комментариев несколько полей и сценарий на jquery. Сценарий отслеживает и считает: нажатие клавиш на клавиатуре, наведение курсора на определённые области страницы. Также есть таймёр, который считает время от загрузки страницы до нажатия кнопки submit.

Данные получались интересные. Спамерский софт загружает html страницы, подставляет данные и «жмёт» submit. Никаких данных о перемещении курсора, кликов по клавишам клавиатуры, т.е. этих действий вообще не совершалось. Мне показался интересным параметр, который я назвал «время жизни страницы»: 10 секунд, 20 секунд. По этим параметрам можно было сгруппировать строки в БД и выявить закономерности 🙂 Вероятно, что это настойка спамерской софтины, которую им было лень менять 🙂 Пользовательские комментарии сложно как-то сгруппировать и они все уникальны. Есть движение мышью, клики и долгое время жизни страницы. Этих данных вполне достаточно чтобы написать защиту от спама в виде сценария на jquery и обработчика данных.

Почему важно убивать спамерские комментарии ещё в зародыше?

Последние версии WP уже содержат в себе настройки позволяющие не публиковать комментарии со ссылками (т.е. на 99% явно спамерские) без одобрения администратора. Казалось бы, вот она — защита. Но комментарии занимают место в базе, увеличивают счётчик auto_increment. Если такие комментарии не чистить, то БД разрастётся и  потребует больше ресурсов системы для хранения базы и обработки запросов к ней. Следствием этого будет замедление работы сайта. Мне встречались сайты на WP, которые в течении нескольких лет не чистились от спам комментариев, в базе их насчитывалось больше 100 тысяч, база расходовала много оперативной памяти и периодически «вешала» всю систему. Из вышесказанного следует то, что любой спам комментарий не должен даже попасть в БД WordPress.

Моя версия защиты от спамерских комментариев для WordPress.

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

 

Добавляем поля в форму для комментариев и скрываем их при помощи css.

 

Обрабатываем полученный комментарий и данные полученные от jquery скрипта. Важно то, что если комментарий не соответствует человеческому, то он не добавляется в БД и «пользователю» об этом ничего не сообщается. Фильтр preprocess_comment это позволяет сделать. Если комментарий не проходит проверку, то происходит редирект без отображения каких-либо ошибок. Это тоже важно, т.к. зачем спамерам сообщать об ошибке при помощи wp_die ? Пусть наслаждаются обычным редиректом 🙂