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

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

140Чтобы комментирование было максимально простым и удобным, нужно выполнить на сайте всего лишь несколько несложных операций. Для начала давайте рассмотрим принцип работы спам-программ, чтобы то, что мы будем делать, было ясно и понятно.

Итак, абсолютно все роботы парсят интернет страницы с целью выявления на них специальных форм <form>……</form> и инпутов <input>…..</input>, находящихся внутри этих форм.

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

Проще говоря, форма комментирования в движке WordPress — довольна стандартна, но может немного отличаться в зависимости от шаблона. Она практически одинакова в разных версиях Вордпресс и выглядит так:

<form action="<?php echo get_option('siteurl'); ?>/wp-comments-post.php" method="post" id="commentform">

<?php if ( $user_ID ) : ?>

<p>Вы вошли как <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>. <a href="<?php echo wp_logout_url(get_permalink()); ?>" title="Выйти из аккаунта">Выйти &raquo;</a></p>

<?php else : ?>

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

<label for="email"><small>E-mail (не публикуется) <?php if ($req) echo "(обязательно)"; ?></small></label>
<input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" tabindex="2" <?php if ($req) echo "aria-required='true'"; ?> />

<label for="url"><small>URL персонального блога</small></label>
<input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" tabindex="3" />

<?php endif; ?>

<textarea name="comment" id="comment" tabindex="4"></textarea>

<input name="submit" type="submit" id="submit" tabindex="5" value="Отправить комментарий!" /><?php comment_id_fields(); ?>

<?php do_action('comment_form', $post->ID); ?>

</form>

Тут следует уделить внимание лишь трём инпутам. Это инпуты, имеющие следующие имена: name=»url», name=»autor» и name=»email». Это как раз то, о чём говорится выше.

Спам-бот ищет форму, находит её, затем, находит в этой форме поля с указанными именами и после этого отправляет на ваш сайт свой мусорный комментарий. Ещё раз — во всех версиях Вордпресс имена одинаковы. Значит, всё что нужно сделать с ними — попросту их изменить.

Итак, делаем примерно так:

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

<label for="email"><small>E-mail (не публикуется) <?php if ($req) echo "(обязательно)"; ?></small></label>
<input type="text" name="bmail" id="email" value="<?php echo $comment_author_email; ?>" tabindex="2" <?php if ($req) echo "aria-required='true'"; ?> />

<label for="url"><small>URL персонального блога</small></label>
<input type="text" name="bsite" id="url" value="<?php echo $comment_author_url; ?>" tabindex="3" />

То есть, изменяем только поля name=»……».

Теперь нашему Вордпресс не ясно, что это за поля и как можно взять информацию с них, ведь он по-прежнему ищет данные, которые отправляются со стандартных полей. Нужно ему слегка помочь! Движку то есть:).

Как помочь Вордпресс «узнать» новые поля?

1) Заходим на сервер, где размещён ваш сайт;

2) Заходим в корень сайта;

3) Ищем здесь файл с именем wp-comments-post.php;

4) Открываем файл wp-comments-post.php и ищем 35-39 строки (примерно). Там находим следующий код:

$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;

5) Изменяем код следующим образом:

$comment_author       = ( isset($_POST['bname']) )  ? trim(strip_tags($_POST['bname'])) : null;
$comment_author_email = ( isset($_POST['bmail']) )   ? trim($_POST['bmail']) : null;
$comment_author_url   = ( isset($_POST['bsite']) )     ? trim($_POST['bsite']) : null;
$comment_content      = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;

6) Сохраняем изменения в файле. ПОЧТИ ГОТОВО!

Теперь движок «научился» принимать и понимать данные, получаемые им из полей формы и новыми именами, которые мы указали.

Остаётся лишь удалить все капчи и анти-спам плагины — они более не нужны для защиты вашего блога от спама. Вот так вот просто мы защитили свой сайт от спама без плагинов. Удачи!

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

Your email address will not be published. Required fields are marked *