Защита Wordpress от спама.

Рубрика: Блог на Wordpress

8 Сен 2009

zashhita-wordpress-ot-spama-pic1Несколько дней не заходил в блог и вот результат – 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
Уничтожитель паразитов Новикова

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

8 комментариев к записи Защита Wordpress от спама.

Avatar

Artem

16 сентября 2009 в 22:41

Мне один хороший человек посоветовал плагин AntiSpam Bee, я понятия не имею как он работает, собственно с виду он себя не проявляет, не нужно регистроироваться, как при Akismet, но работает просто на ура!!! Отфильтровывает отлично, очень рекомендую.

Avatar

xela

17 сентября 2009 в 9:50

Он отфильтровывает в спам, или не пускает комментарии? Фильтрует и акисмет хорошо, вот только удалять задалбывает периодически.

Avatar

Artem

18 сентября 2009 в 1:55

Эм… Не совсем понял, что вы имеете ввиду, но если я правильно вас понял, он отфильтровывает в спам. Потом в списке спам-комментариев они видны и их можно сразу все удалить. Также, в настройках плагина можно поставить опцию сразу удалять или автоматически удалять по истечение нескольких дней. Отфильтровывает отлично, все по делу.

Avatar

xela

18 сентября 2009 в 18:50

Не знаю- не знаю, у меня акисмет порой ошибается. А с манипуляциями, которые написаны выше, спам просто исчез, он не попадает в базу и его перестают посылать. Даже удалять ничего не нужно.

Avatar

zoOm

12 октября 2009 в 18:34

Одно время, после создания блога, спам доводил просто до бешенства. По 200 сообщений в день. После установки плагинов спам просто на автомате отсеивался. Банил все IP с которых спамили, а они все равно лезли и лезли. А теперь уже пару месяцев ни одной крупной “атаки”… Может забили ? :)

Avatar

xela

12 октября 2009 в 18:40

У меня после описанной модификации спам исчез вовсе. Но что-то подсказывает, что спаммеры-то не перевелись :)

Avatar

Lex

14 октября 2009 в 22:48

Идея хорошая :-)
Только, по-моему, код надо немного поправить:
Во втором коде из input type=”text” name=”notaspam” удалите id=”email” (насколько я знаю, нельзя иметь два элемента с одинаковым id). Должно быть так:
input type=”text” name=”notaspam” value=”…

В третьем коде вместо isset($_POST['email']) надо написать isset($_POST['notaspam']) (прежде, чем брать значение переменной — надо проверить, существует ли она. Она, а не спамерская переменная)

Первое, как я вижу, на форме комментария исправлено. Просто в статье забыли поправить? :-)

Avatar

xela

15 октября 2009 в 12:01

Согласен полностью, поправил в тексте. Приятно увидеть внимательного читателя. Спасибо.

Оставить комментарий к записи

Защита Wordpress от спама.

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

Мои Яндекс.Фотки

  • IMG_5850.JPG
  • IMG_5697.JPG
  • IMG_5672.JPG
  • IMG_5641.JPG
  • красный
  • IMG_6868.JPG
  • IMG_3065_1.JPG
  • IMG_7261.JPG

Музыкальная пауза


Скачайте флэш-плеер