Как закрыть путь для спама Вашего блога на WordPress.
Спам моих сайтов на WordPress стал для меня непосильным. На некоторых сайтах доходило до 2 тысяч спам-сообщений в сутки. Такое количество спама по воздействию уже равно xSS или DDOS атаке на сайт. Потому, что сайт уже просто виснет и перестает грузиться.
В поисках действенного способа борьбы со спаммерами были испробованы несколько плагинов к WordPress. В итоге был найден простой способ, дающий наилучший результат и в то же время самый легкий для работы движка и баз MySQL (так как в этом случае MySQL совершенно никак не задействована).
Суть данного способа в том, что спамерские скрипты настраиваются по умолчаниям движков атакуемых сайтов. Т.е. в нашем случае по умолчаниям Вордпресса. А по этим умолчаниям комментатор должен заполнить поля "Имя" (имеющее name="author" и id="author"), E-mail (имеющее name="email" и id="email"), и текстареа самого сообщения.
То есть спамерский скрипт настроен на поиск на странице данных полей по name или id. Вот и подстроим ему ловушку в виде поля, которое он ищет на странице, но из этой ловушки данные не будут передаваться никуда. А для нормального комментатора (чтоб его не путать выбором) уберем эту ловушку со страниц сайта в скрытый div за пределы видимой области экрана.
В итоге E-mail адрес комментатор-человек будет вписывать в поле на странице (только это поле будет иметь другой name и id) и его коммент будет добавляться. А робот-спамер же будет вписывать свое мыло в скрытом от человеческого глаза диве (так как он его искал) и в результате пролетать, как фанера над Парижем.
Дополнительный совет тем, кто будет использовать данный способ (если Вы достаточно подкованы для этого
): лучше изменить на свои названия из кода, приведенного ниже, для заново присваиваемых имени и id поля E-mail и дива, т.е. заменить в данном коде слова "adres-em" и "hunter".
Итак, сам способ:
В файлах comments.php и comments-popup.php шаблона темы находим примерно такие строку:
<input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
заменяем на:
<div class="hunter"><input type="text" name="email" id="email" value="" size="22" maxlength="1" tabindex="2" /></div> <input type="text" name="adres-em" id="adres-em" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" />
В файле style.css шаблона темы для вывода поля-ловушки в 1000px слева от экрана компьютера добавляем в конце:
.hunter {position : absolute; left : -1000px; }
Где в скрытом диве за пределами экрана (на 1000 пикселей левее видимой области экрана) создается аналогичное поле с именем и id которые предусмотрены в WordPress для E-mail комментаторов по умолчанию. Из этого поля не передается параметр $comment_author_email. Дополнительный параметр maxlength="1" определяет возможность вписать только 1 символ, что противоречит установкам WordPress при проверке адреса E-Mail. Т.к. WordPress проверяет наличие символа "@" в емэйле.
Далее переопределяем в скрипте WordPress name и id поля, из которого скрипт должен брать адрес E-mail комментатора таким образом:
В файле wp-comments-post.php, который лежит в корне сайта находим примерно такие строки:
$comment_author = trim($_POST['author']); $comment_author_email = trim($_POST['email']); $comment_author_url = trim($_POST['url']); $comment_content = trim($_POST['comment']);
Заменяем их на:
$spam_test_field = trim($_POST['email']); if(!empty($spam_test_field)) wp_die('NO SPAM!'); $comment_author = trim($_POST['author']); $comment_author_email = trim($_POST['adres-em']); $comment_author_url = trim($_POST['url']); $comment_content = trim($_POST['comment']);
Июль 4, 2008 в 10:28 am
Хех, а не проще ли просто скрыть поле, если уж всё равно бот будет его заполнять?
Июль 4, 2008 в 3:55 pm
Поле для бота и так скрыто, оно за пределами экрана. Человек его не видит. Но ведь оно должно присутствовать в исходном коде страницы, бот его должен находить, чтоб заполнить. Скрыть можно по разному, это один из вариантов. Или я вопрос не понял?
Июль 17, 2008 в 11:52 pm
Я чего то не понимаю. А зачем то второе поле? Неужели не проще просто переименовать поля в файле и в цсс соответственно и все. Пускай бот ищет поле и не находит ))
Июль 19, 2008 в 3:16 pm
Так пусть бот находит поле, считает, что запостил и передает хозяину ОК.
Потом, наличие этого поля-ловушки дает возможность наладить скрипту с нашей стороны проверять это поле на непустоту и, соответственно, применить какие-либо репрессии к спамеру… Но это уже другая задачка…