Как надежно защитить свой блог WordPress от спама без плагинов?

Как только вы создали свой блог на WordPress и поисковым машинам становится известно об этом, вы с неудовольствием узнаете, что под движок написано множество спам-ботов. Как следствие появляется обилие спама в комментариях, который попросту надоедает удалять изо дня в день. Самый простой путь защитить свой WordPress блог от спама, это переименовать поле «comment» формы отправки на любое другое, тогда спам-боты, рассчитанные на стандартное имя поля, просто не смогут его заполнить. Главное, это надо сделать грамотно, по технологии самого WordPress, что бы потом наши изменения не затирались при обновлении блога. Итак:

1. Если у вас еще нет файла functions.php по пути /wp-content/themes/Ваша_тема, то создаем этот файл. В него пишем следующий код, который меняет имя поля:

function my_change_form_defaults( $default ) {
$default['comment_field'] = preg_replace('/"comment"/', '"any_name"', $default['comment_field']);
return $default;
}
add_filter('comment_form_defaults', 'my_change_form_defaults');

2. После этого в ваших HTML страничках стандартное поле «comment» заменится на «any_name». После того, как пользователь заполнит комментарий, необходимо сделать обратное преобразование, потому как сам WordPress ничего не знает о том, что вы переименовали поле:

function pre_comment_check() {
$_POST['comment'] = $_POST['any_name'];
unset($_POST['any_name']);
}
add_action('pre_comment_on_post', 'pre_comment_check');

После такой легкой манипуляции спам пропадет. Полностью.

Но, можно пойти еще дальше… Есть замечательный сервис stopforumspam.com. Смысл сервиса в том, что попавшие туда данные спамера, публикуются в открытый доступ и администраторы форумов имеют возможность сверяться со списком, при регистрации очередного пользователя форума. Мы можем помочь другим, настучав на спамера, попытавшегося поспамить в наш блог.

3. Для начала придется зарегистрироваться и получить ключ доступа на сайте stopforumspam.com

4. Дальше модифицируем немного наш код. Для спамеров, которые отправляют спам с нашей странички, а не напрямую методом POST исправляем первую часть:

function my_change_form_defaults( $default ) {
$default['comment_field'] = preg_replace('/class="comment-form-comment"/', 'class="comment-form-comment" style="display:none"', $default['comment_field']) . preg_replace('/"comment"/', '"any_name"', $default['comment_field']);
return $default;
}
add_filter('comment_form_defaults', 'my_change_form_defaults');

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

5. Дорабатываем вторую часть:

function pre_comment_check() {
// Если поле "comment" заполнено значит это спамер, а не реальный посетитель
if ( '' != $_POST['comment'] ) {
// Открываем файл ".htaccess" в корне нашего блога и "баним" ненавистного спамера, добавляя время и дату бана
if ( $f = @fopen( '.htaccess', 'a' ) ) {
fwrite( $f, "deny from " . $_SERVER['REMOTE_ADDR'] . " #" . date("d.m.Y H-i-s") . "\n" );
fclose( $f );
}
// Стучим на спамера на stopforumspam.com
wp_remote_post('http://www.stopforumspam.com/add.php', array ( 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url( '/' ), 'body' => array ( 'username' => $_POST['author'], 'ip_addr' => $_SERVER['REMOTE_ADDR'], 'email' = 'email' => $_POST['email'], 'api_key' => 'Ключ доступа от stopforumspam' ) ));
// Завершаем работу программы с ошибкой 403
wp_die( '<div align=center><b>Spammer Detected!!!</b></div>', '', array('response' => 403) );
}
$_POST['comment'] = $_POST['any_name'];
unset($_POST['any_name']);
}
add_action('pre_comment_on_post', 'pre_comment_check');

6. Теперь если вы хотите воспользоваться результатом своей работы при необходимости вы можете использовать список спамеров с stopforumspam.com. Я покажу это на примере движка nginx. В файл etc/nginx/nginx.conf добавляем следующую строку:

    include       mime.types;
default_type application/octet-stream;
include blacklist.conf;

7. Теперь пишем скрипт для того, что бы запускать его по расписанию:

cd /tmp
rm listed_ip_1.zip
wget http://www.stopforumspam.com/downloads/listed_ip_1.zip
if (test -r listed_ip_1.zip) then
rm listed_ip_1.txt
unzip listed_ip_1.zip
rm /etc/nginx/blacklist.conf
cat listed_ip_1.txt | awk '{print "deny " $1 ";"}' >> /etc/nginx/blacklist.conf
service nginx restart
fi

И все, осталось только добавить этот скрипт в работу по расписанию (не чаще чем раз в час) и спамеров вы больше не увидите никогда!

4 комментариев к “Как надежно защитить свой блог WordPress от спама без плагинов?

    • С тех пор как я его добавил, у меня так не одного спамного сообщения и не прошло. А их иногда отсеивается по 90 айпишников за день.

        • Я его, честно, не пробовал. Хотелось сделать просто и надежно. Но по опыту общения с антиспам программами ни одна не сдерживает 100% спама.

Добавить комментарий

Ваш e-mail не будет опубликован.