Несколько дней не заходил в блог и вот результат – 48 комментариев за 4 дня и все они похожи на автоматический спам. Плагин антиспама Akismet фильтрует не все, да и часто наоборот в спам закидывает нормальные комментарии, поэтому на 100% полагаться на него нельзя и все равно приходится просматривать все самому. Решил поискать, как защитить WordPress от спама не плагинами и нашел интересное решение – переделать форму отправки комментариев.

Люди спамят осмысленно и немного, роботы составляют большинство спамящих, и берут они числом и скоростью. Им не важно пройдет ли комментарий, не на этом сайте, так на следующем они пройдут сквозь защиту, поэтому рассылка осуществляется быстро и по стандартному сценарию. Отсюда вывод – от людей мы не защитимся, а вот от роботов реально вполне, причем делать это нужно в автоматическом порядке без участия владельца блога.

Порядок поведения спам-ботов следующий: находим блог, в нем статью, далее форму для комментариев, заполняем стандартные поля и уходим дальше. Иногда роботы выбирают 1-2 строки из текста страницы и вставляют в поле комментария, но это для нас не важно. Ни блог, ни статью мы спрятать от них не сможем, а вот с формой размещения комментариев как раз поработать и стоит. Обычно она состоит из 4 полей- “имя”, “e-mail”, “сайт”, “комментарий”. Если копнуть чуть глубже, то мы увидим, что эти поля имеют name и id, которые для большинства сайтов совпадают.

Как же обмануть бота? При заполнении формы, он пойдет по стандартным полям, и, если создать дубликат поля с другим name, то заполнено будут именно стандартное. Но что делать пользователю-человеку, ведь он увидит несколько одинаковых полей в форме? Все просто – оставим для человека переименованное, он ничего не заметит, а стандартное скроем при помощи css, его увидит и заполнит робот. Дальше сделаем анализ заполненной формы, и при наличии текста в скрытом поле удалим комментарий, как спам.

Для изменения нам понадобятся следующие файлы: /wp-content/themes/тема/comments.php – это файл формы комментария и /wp-comments-post.php – это обработчик формы, ну и файл стилей, в котором мы будем прятать дублирующее поле, обычно это /wp-content/themes/тема/style.css.

Сначала исправляем саму форму добавления комментариев, для этого находим в comments.php часть кода, которая ответственна за внешний вид, обычно она расположена ближе к концу файла, нас будет интересовать строка ввода e-mail:

<input type=”text” name=”email” id=”email” value=”<?php echo $comment_author_email; ?>” size=”22″ tabindex=”2″ />

Для этого поля создаем дубликат для ботов и добавляем класс для невидимости, для людей меняем название поля:

<input type=”text” class=”irobot” name=”email” id=”email” value=“” size=”22″ tabindex=”2″ />
<input type=”text” name=”notaspam” id=”true-email” value=”<?php echo $comment_author_email; ?>” size=”22″ tabindex=”3″ />

При использовании кода желательно поменять irobot, notaspam и true-email на любые другие имена.

Переходим к обработчику формы /wp-comments-post.php. В файле находим обработку формы, добавляем проверку на заполнение скрытого поля и меняем содержимое email на пользовательское:

$spam_test_field = trim($_POST['email']);
if(!empty($spam_test_field)) wp_die(‘Spam must die!’);

$comment_author       = ( isset($_POST['author']) )  ? trim(strip_tags($_POST['author'])) : null;
$comment_author_email = ( isset($_POST['notaspam']) )   ? trim($_POST['notaspam']) : null;

Таким образом, если заполнено невидимое поле email, то комментарий не пройдет – это однозначно бот. Осталось только спрятать дублированное поле, и человек заполнить его не сможет. Прописываем класс в файле стилей:

.irobot{ display: none; }

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

UPD. Исходя из опыта администрирования нескольких блогов, могу сделать вывод, что защита WordPress от спама путем изменения формы комментариев, в результате является самым простым способом. Плагины рано или поздно начинают пропускать спам, а затем становятся полностью неэффективными, кроме этого они требуют настройки, обновления и т.д., а тут минимальные манипуляции и почти 100% результат отсеивания ненужных сообщений.

Ссылки по теме:
Защита блога от спама по версии adw0rd
Плагин “Я не робот!”
Защита от спама при помощи математики Math Comment Spam Protection
Уничтожитель паразитов Новикова

Поделиться в соц.сетях

Похожие записи

Мне нравится!

Нравится