Как бороться со спамом в WordPress?

Таки здравствуй, дражайший читатель.

Сегодня речь пойдёт о такой неприятнейшей вещи как спам в wordpress. Таки да, дрянь это премерзкая и отвратительная. И, что любопытно, практически непобедимая. Да, постоянно изобретаются новые плагины. И спам-боты постоянно совершенствуются, обходя их функционал. В результате спам-бот пробивает защиту, и плагин превращается в груду бесполезного программного кода. Даже могучий Akismet — хвала ему во веки веков — и тот пропускает спамные комментарии, ну либо наоборот, сливает в спам вполне годные. Так что — практика показывает, единственное приемлемое решение, это уникальная собственная реализация защиты от спама. Но — это доступно только программистам, или хотя бы более-менее понимающим основы PHP. Потому как потребуется вносить изменения непосредственно в движок.

Итак, самый простой способ одолеть спам, это переименовать поля формы комментариев совместно с правками в скрипт получения этих самых комментариев. Причем, лично я его опробовал на себе, и могу сказать, что за последние недели две спама в каментах у меня не было, хотя до того — по 15 спамных каментов ежедневно приходило минимум. Всё дело в том, что движок WordPress имеет стандартные имена полей форм. Например в форме комментариев — само текстовое поле называется (id & name) comment. Назовите его как-нибудь вроде comment_anti_spam с соотвествующими правками в файле wp-comments-post.php, который лежит рядом с вашим index.php, и всё — спам-боты будут атаковать поле comment, но не попадут в базу, очередь модерации, и, соответственно, на сайт. При этом само поле comment надо оставить, и заодно проверять ещё и его, заполнено или нет. Дело в том, что это поле скрыто на странице средствами CSS, и живой человек увидеть его не сможет. А роботу всё равно. Итак, допустим, мы решили — делаем так. Что для этого требуется предпринять? Во-первых, отредактировать файл /wp-content/themes/<имя вашей темы>/style.css, добавив в её конец следующий класс:

.invisible {
display:none;
}

Этот класс, к слову, универсален — он позволяет оставить тот или иной элемент непосредственно в коде, но при этом вообще не выводить его на странице.

Затем, редактируем файл /wp-content/themes/<имя вашей темы>/comments.php:

<input class="invisible" type="text" name="author" id="author" 
value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
<input class="comment" type="text" name="author_anti_spam" id="asp_author" 
value="<?php echo $comment_author; ?>" size="22" tabindex="1" />
        

По большому счёту, мы просто дублируем поле, одному прописываем класс invisible (тому, которое оригинальное), а другому оставляем класс comment. И переименовываем видимое поле. После чего лезем в корень сайта, и там находим файл wp-comments-post.php, в котором меняем следующее:

$comment_author_spam       = ( isset($_POST['author']) )  ? 
trim(strip_tags($_POST['author'])) : null;
$comment_author_email_spam = ( isset($_POST['email']) )   ? trim($_POST['email']) : null;
$comment_author_url_spam   = ( isset($_POST['url']) )     ? trim($_POST['url']) : null;
$comment_content_spam      = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;

if ( !empty($comment_author_spam) || !empty($comment_author_email_spam) ||
 !empty($comment_author_url_spam) || !empty($comment_content_spam) )
{
    die('Ай ай ай. Спамить не есть гут!');
    exit;
}

$comment_author       = ( isset($_POST['author_anti_spam']) )  ? 
trim(strip_tags($_POST['asp_author'])) : null;
$comment_author_email = ( isset($_POST['email_anti_spam']) )   ? trim($_POST['asp_email']) : null;
$comment_author_url   = ( isset($_POST['url_anti_spam']) )     ? trim($_POST['asp_url']) : null;
$comment_content      = ( isset($_POST['comment_anti_spam']) ) ? trim($_POST['asp_comment']) : null;

Тащемта, после этого всё будет работать как часы. Если только у вас не очень высокопосещаемый блог, и спамеры не будут править алгоритм конкретно под вас. Кстати в следующей статье на эту тему есть планы описать принципы борьбы со спамом в wordpress, и почему плагины предназначенные для такой борьбы — рано или поздно вырождаются, т.е. начинают пропускать спам на сайт.

Автор

Алекс Разгибалов

Сумасшедший мужчина, неопределённого возраста, наслаждающийся манией преследования. Паталогически недоверчив, эгоистичен, авторитарен. Вторичные диагнозы - программист и поц. Владеет английским языком на уровне около хренового разговорного. Также знаком с некоторыми другими языками. Интересуется всем и вся, за счёт чего в любой области знания являются поверхностными, неглубокими. Характер невыдержанный. Крепость - 55 градусов.

Как бороться со спамом в WordPress?: 4 комментария

  1. Пытаюсь применить ваш метод борьбы со спамом, только вот не понимаю про изменения в файле wp-comments-post.php

    вот эта часть у меня в файле есть
    $comment_author = ( isset($_POST[‘author_anti_spam’]) ) ?
    trim(strip_tags($_POST[‘asp_author’])) : null;
    $comment_author_email = ( isset($_POST[’email_anti_spam’]) ) ? trim($_POST[‘asp_email’]) : null;
    $comment_author_url = ( isset($_POST[‘url_anti_spam’]) ) ? trim($_POST[‘asp_url’]) : null;
    $comment_content = ( isset($_POST[‘comment_anti_spam’]) ) ? trim($_POST[‘asp_comment’]) : null;
    я ее подправила, а вот то что у вас до этого написано у меня в файле нет, я эту часть добавила, но не уверена, что сделала правильно, т.к. у вас написано «меняем следующее», а не добавляем.
    Поясните, пожалуйста, как сделать это правильно?

    1. А вы просто в файле темы должны это сделать. Там смотря как тема называется, поэтому и дан путь /wp-content/themes/< имя вашей темы>/comments.php

      Впрочем, лично я бы посоветовал не морочиться так, а сделать проще — поставить плагин от KeyCaptcha — вот та капча, которую вы наверняка заполняли, чтобы оставить комментарий. Через неё спам вообще не проходит — по крайней мере за все время её функционирования никакого спама не было. http://keycaptcha.com/ их сайт, а сам плагин ищите в WP по ключевому слову keycaptcha.

  2. Про изменения в файле /wp-content/themes//comments.php понятно, далее не понятно, а там речь про корень сайта, ну да ладно.

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

    Но.. благодаря вашему совету поискать что-то другое, в итоге поставила плагин WP-SpamFree (очень хорошие отзывы про него), надеюсь он не подведет.

    1. Боитесь, что пользователи не поймут, что делать с капчей? :) Ну вот судя по демографии посетителей — у меня почти нет ни слишком молодых (менее 25), ни слишком старых (более 60) читателей — но разбираются же. Это зато очень здорово экономит нервы админу. Во-первых, нет спама, а во-вторых резко сокращается количество идиотов в комментариях. Например многие из них уходят, так и не сумев сложить «точно» картинку, но при этом не поняв, что точно складывать вовсе не обязательно.

      В принципе сейчас просто очень много всего, чтобы с этой напастью бороться. У меня вот к примеру совместно работают Akismet + KeyCAPTCHA. Первый отсекает известных ботов путем сравнения с базой Akismet, а второй отсекает ботнеты, которые таки проскочили.

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Собирать идеально - не обязательно, просто приблизительно соберите картинку (должен быть включен JavaScript).WordPress CAPTCHA