Как избавиться от автоматического спама в 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 );
Как по мне, так движок стал слишком часто обновляться. Если вы считаете, что отключив автоматическое обновление, ухудшите безопасность движка, то почитайте вот это.
Лично меня пока спамеры не достают.
Не пронюхали еще :)
На меня часто валится спам, теперь имею представление, как избавиться. Очень понравился блог, подписалась на рассылку
Людмила, спасибо за отзыв! Удачи вам в борьбе со спамом! :)
В последнее время спам с порносайтов ну просто достал, придется начать с ним борьбу.
Что поделать, покой нам только снится :)
Спасибо за толковую статью. все понятно. Вопрос про автообновление. Спасибо за ссылку, поняла, что лучше вручную.
Вопрос:если отключить автообновление в сonfig, wp вообще не сможет обновляться автоматичеcки или будет все как раньше: сначала спрашивать хочу ли обновить автоматом.Или уже будет только предлагать скачать новую версию?
Пожалуйста, Марина!
Если пропишете указанную строку в сonfig, то движок будет просто предлагать скачать новую версию.