Как избавиться от автоматического спама в WordPress

Как избавиться от автоматического спама в WordPress

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

Поиски привели меня к старой статье 2009 года под названием «Нет автоматическому спаму», опубликованной на блоге WordPressPlugins.ru.

Действительно рабочий вариант. Действует весьма просто: так как боты практически все заточены под одинаковые формы комментирования на движке WordPress, то их ничего не стоит обмануть и подсунуть «левое» поле для коммента. И если бот его заполнит, то автоматом будет послан на йух.

Чтобы это поле не заполнил случайно живой комментатор, от него оно будет скрыто при помощи дополнительного правила в файле стилей CSS.

Вот что необходимо сделать.

Во-первых, открыть файл wp-comments-post.php движка и заменить кусок кода, начиная с 50 строки (для версии движка 3.4.1)

$comment_author = ( isset($_POST['author']) ) ? trim(strip_tags($_POST['author'])) : null;
$comment_author_email = ( isset($_POST['email']) ) ? trim($_POST['email']) : null;
$comment_author_url = ( isset($_POST['url']) ) ? trim($_POST['url']) : null;
$comment_content = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;

Вот на это:

$spam_test_field = trim($_POST['comment']);
if(!empty($spam_test_field)) wp_die('Fuck you spammer shit!');
$comment_author = ( isset($_POST['author']) ) ? trim(strip_tags($_POST['author'])) : null;
$comment_author_email = ( isset($_POST['email']) ) ? trim($_POST['email']) : null;
$comment_author_url = ( isset($_POST['url']) ) ? trim($_POST['url']) : null;
$comment_content = trim($_POST['real-comment']);

Фразу ‘Fuck you spammer shit!’ можете заменить на что-нибудь более благозвучное или наоборот матерное.

Во-вторых, открыть файл comments.php вашего шаблона, найти этот кусок кода:

<p><textarea name="comment" id="comment" cols="100%" rows="10" tabindex="5"></textarea></p>

и заменить его на это:

<div class="spammershit">
<p><textarea id="comment" name="comment" cols="50" rows="10" tabindex="4"></textarea></p>
</div>
<p><textarea name="real-comment" id="comment" cols="100%" rows="10" tabindex="5"></textarea></p>

Ну и, наконец, добавить в файле стилей CSS следующее правило:

.spammershit {position: absolute; left: -1000px;}

Я установил недавно эту фишку практически на всех своих блогах. В результате за несколько прошедших дней ни одного автоматического спам-коммента. Рекомендую! За идею спасибо Александру Самсонову (wordpressplugins.ru).

Кому интересно, у автора опубликован более свежий способ защиты от автосмпама для новых версий движка: «Защита от спама в WordPress без плагинов»

UPD от 16.01.2017: В последних версиях движка изменился файл wp-comments-post.php, и там просто негде теперь вставить свой кусок кода. Как я и говорил ранее, у автора метода есть вариант для новых версий движка. Необходимый код он добавляет уже не в сам движок, а в файл functions.php шаблона.

Это, конечно, правильный метод, чтобы не морочиться с каждым обновлением движка. Но у меня это дело не сработало. Возможно, из-за того, что последний его совет по правкам был написан уже год назад (январь 2016), а движок с тех пор обновлялся еще несколько раз, и правки в файле functions.php шаблона уже не срабатывают.

Чтобы не париться, я просто взял старый файл wp-comments-post.php с добавлением необходимого кода и добавил его в движок, удалив новый. Функциональность ничуть не изменилась, зато метод защиты снова работает.

Если у вас нет такого старого файла, то можете забрать его здесь. Необходимый код там уже добавлен.

Чтобы вся эта штука не слетала при каждом обновлении движка (который теперь происходит автоматически), рекомендую в файле wp-config.php прописать строку, отключающую автоматическое обновление:

define( 'WP_AUTO_UPDATE_CORE', false );

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

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

8 комментариев

  1. Дмитрий | 10.11.2015

    Лично меня пока спамеры не достают.

  2. Не пронюхали еще :)

  3. Людмила | 16.11.2015

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

  4. Людмила, спасибо за отзыв! Удачи вам в борьбе со спамом! :)

  5. bytrina | 24.11.2015

    В последнее время спам с порносайтов ну просто достал, придется начать с ним борьбу.

  6. Что поделать, покой нам только снится :)

  7. марина | 17.03.2017

    Спасибо за толковую статью. все понятно. Вопрос про автообновление. Спасибо за ссылку, поняла, что лучше вручную.

    Вопрос:если отключить автообновление в сonfig, wp вообще не сможет обновляться автоматичеcки или будет все как раньше: сначала спрашивать хочу ли обновить автоматом.Или уже будет только предлагать скачать новую версию?

  8. Игорь Квентор | 18.03.2017

    Пожалуйста, Марина!
    Если пропишете указанную строку в сonfig, то движок будет просто предлагать скачать новую версию.

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