Всем привет! С вами Денис Максимов!

Как защитить свой блог или сайт от спам комментариев!? Какая защита сайта от спама установлена у вас? Взялся за написание этой статьи после нападения спама в комментариях. Многие сталкивались с данной проблемой, но ни чего не предпринимали чтобы избавиться раз и навсегда от этой заразы. Реально раздражают комментарии с кучей ссылок на непонятные ресурсы, так ладно если бы они оставляли свои комменты по теме, а не комментировали пост «Как закрыть ссылки от индексации!» ссылкой, которая ведет на сайт продающий трусы или велосипеды. Было такое? Теперь мы с вами все исправим и установим защиту от спама на свой блог.

Как правило спам рассылку делают специальные программы, для этого им необходимо заполнить поля (имя, почта, сайт и саму форму комментария), они легко находят эти поля и автоматически заполняют их. Многие блоггеры ставят плагин — капчу (поле, в котором, чтобы добавить комментарий, нужно ответить на вопрос), для защиты от спам — роботов. Такая функция значительно снижает комментирование статей, потому что многим просто лень заполнять эту капчу, а также делает большую нагрузку на блог. Но все же, этот метод я также объясню как поставить.

Плагин Antispam-bee — отличный плагин для защиты от спама.

Он не использует базу данных для своих задач и поэтому, не нагружает ваш блог. Работает сразу после установки и активации. Не пропускает спам комментарии благодаря невидимому полю, которое мы с вами не видим, а спам — робот видит и заполняет его также как и все остальные поля. Весь спам, который плагин обнаружит, автоматом удаляет. Вам, за ним следить не придется! У плагина есть некоторые настройки, можете ни чего не настраивать, он и так нормально настроен и отлично работает. У меня он раньше стоял, но я его убрал, надеясь что спама не будет. Заблуждался :) Скачайте плагин и опробуйте в действии!

Настройки плагина Antispam-bee

 

Следующий плагин — капча называется «WP-reCAPTCHA», с которым вы уже наверное сталкивались. Сразу скажу, что он мне не нравится, но как защитник — надежный. Для того оставления комментария нужно заполнить поле, в котором обычно не понятные фразы на английском языке. Скачайте плагин, закиньте его к себе на блог в папку с плагинами и после активируйте. Появится сообщение об ошибке. Для того чтобы исправить, нужно перейти по ссылке и зарегистрироваться для получения API ключа. Введете ключ и готово.

Защита от спама

Защита сайта от спама без плагина!

Я предлагаю еще один вариант для защиты от спама без плагина, но необходимо будет отредактировать некоторые файлы вашего блога. Лично я стараюсь избавиться от плагинов в целях ускорения загрузки блога. Если вы не хотите сами изменять в самих файлах коды, то воспользуйтесь плагинами.

 

Итак! В папке с  вашей темой нам нужны 2 файла, это (functions.php и comments.php) скопируйте их на рабочий стол. Рекомендую сделать еще и копии файлов, которые будете ковырять.

Вариант первый.

Откройте файл functions.php с помощью любого редактора, я пользуюсь Notepad++, и вставьте в самое начало после тега  <?php этот код:

//проверка на спам
add_filter('pre_comment_on_post', 'verify_spam');
function verify_spam($commentdata) {
$spam_test_field = trim($_POST['comment']);
if(!empty($spam_test_field)) wp_die('Спаму нет!');
$comment_content = trim($_POST['real-comment']);
$_POST['comment'] = $comment_content;
return $commentdata;
}

Если для вывода формы комментариев у вас отвечает функция comment-form, то нужно в файл functions.php вставить этот код:

//добавление своего поля для ввода комментария
add_filter('comment_form_defaults', 'change_comment_form_defaults');
function change_comment_form_defaults($default) {
$commenter = wp_get_current_commenter();
$default['comment_notes_after'] .=
'
<p class="comment-form-real-comment"><label for="real-comment">Комментарий</label><textarea id="real-comment" name="real-comment" rows="8" cols="45"></textarea></p>
';
return $default;
}

Проверить какая функция действует у вас не сложно. Скопируйте файл single.php на рабочий стол, и найдите в нем функцию вывода комментариев. Для этого нажмите ctrl+f и введите сначала comments_template, если ни чего не найдете, то comments_form.

Идем дальше. Данный код добавляет для спам — робота еще одну форму, которую он также заполнит. Откройте файл comments.php и найдите строку содержащую что то такое, зависит от шаблона:

<textarea id="comment" class="textarea" name="comment"></textarea>

И замените эту строку на вот эту:

<textarea id="comment" class="textarea" style="display: none;" name="comment"></textarea>
<textarea id="real-comment" class="textarea" name="real-comment"></textarea>

И последний вариант, который меня полностью устраивает, именно из за него я убрал плагин Antispam-bee.

Для тех у кого comments_template отвечает за комменты, но возможно будет работать и с функцией comments_form, я не испытывал.

В файл function.php в самое начало после <?php ставим этот код:

add_filter('pre_comment_on_post', 'replacing_the_field_of_comments');
function replacing_the_field_of_comments($commentdata) {
      $spam_test_field = trim($_POST['comment']);
  if(!empty($spam_test_field)) wp_die('Спам не пройдет!');
      $comment_content = trim($_POST['antispam_comment']);
      $_POST['comment'] = $comment_content;
      $comment_author = trim($_POST['villi']);
      $_POST['author'] = $comment_author;
      $comment_author_email = trim($_POST['simon']);
      $_POST['email'] = $comment_author_email;
      $comment_author_url = trim($_POST['artur']);
      $_POST['url'] = $comment_author_url;
  return $commentdata;
}

Далее в файле comments.php ищем что-то похожее на такую строчку:

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

Подменить эту строку на вот такую:

<textarea id="comment" style="display: none;" name="comment"></textarea>
<textarea class="textarea" id="antispam_comment" tabindex="4" cols="100%" name="antispam_comment" rows="10"></textarea>

Можно еще изменить поля ФИО, E-mail и сайт, для более надежной защиты, чтобы спам — робот вообще потерялся.

В этом же файле найдите строки, которые выводят эти поля, например такие:

<input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="1" <?php if ($req) echo "aria-required='true'"; ?> />
<label for="author"><small>Имя <?php if ($req) echo "(обязательно)"; ?></small></label>

<input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="2" <?php if ($req) echo "aria-required='true'"; ?> />
<label for="email"><small>Почта (не будет опубликовано) <?php if ($req) echo "(обязательно)"; ?></small></label>
<input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="3" />
<label for="url"><small>Адрес сайта</small></label>

и замените их, только очень внимательно и аккуратно на вот такие поля:

<input id="author" tabindex="1" type="text" name="villi" size="22" value="<?php echo $comment_author; ?>" /> />
<label for="author"><small>Имя <!--?php if ($req) echo "(обязательно)"; ?--></small></label>

<input id="email" tabindex="2" type="text" name="simon" size="22" value="<?php echo $comment_author_email; ?>" /> />
<label for="email"><small>Почта (не будет опубликовано) <!--?php if ($req) echo "(обязательно)"; ?--></small></label>
<input id="url" tabindex="3" type="text" name="artur" size="22" value="<?php echo $comment_author_url; ?>" />
<label for="url"><small>Адрес блога</small></label>

Ставьте коды осторожно не задевая сторонние скобки, кавычки и другие символы. И последнее, если вы заметили в этих строках есть названия полей (villi, simon и artur), их можете поменять на свои. Если будете менять имена, то не забудьте изменить и в файле function.php.

На этом я заканчиваю, надеюсь статья была для вас интересной и полезной!

Подписывайтесь на обновления блога для получения анонсов статей почтой!!!

Желаю Вам счастья без спама!