Скрипты чаще всего не заходят на страницы блога, они более програмтичны: боты обращаются напрямую к файлу, отвечающему за публикацию комментариев. На этом и основаны методы фильтрации комментариев: если предотвратить прямое обращение к файлу, с помощью которого сообщение публикуется в блоге, то можно сразу отсечь весь автоматический спам. Сделать это можно, внеся небольшие изменения в файл .htaccess:
RewriteEngine On RewriteCond %{REQUEST_METHOD} POST RewriteCond %{REQUEST_URI} .wp-comments-post.php* RewriteCond %{HTTP_REFERER} !.*yourdomainname.* [OR] RewriteCond %{HTTP_USER_AGENT} ^$ RewriteRule (.*) ^http://%{REMOTE_ADDR}/$ [R=301,L]
Этот код проверяет, откуда идет обращение к файлу wp-comments-post.php, отвечающему за размещение комментариев. Если он идет не со страницы вашего блога, то прямое обращение к файлу запрещается. Так как боты не заходят на страницы блога, обращаясь напрямую к файлам, то они блокируются.
Подробнее:
Этот метод действует безотказно в 99% случаев. Однако остается 1% ложных срабатываний – они происходят из-за нестандартных форм комментирования и сложных кодов, используемых на страницах: если адрес, с которого пришел комментатор, определяется неправильно, то он не может оставить комментарий. Поэтому стоит рассмотреть еще один способ, являющийся самым эффективным в борьбе с автоматическим спамом.
Этот способ не запрещает обращаться напрямую к файлу, отвечающему за публикацию комментариев, даже наоборот, такое обращение поощряется. Он основан на том, что бот (скрипт) использует для публикации спама поля в форме комментирования, считающиеся стандартными, заполняя их своими данными. Если незаметно подменить эти поля на другие, и проанализировать заполенные поля, то можно понять, кто оставил комментарий, человек или бот. Для этого в форму комментирования вводится одно поле-ловушка, которое выдается за стандартное. В обычной форме комментирования всегда встречаются три поля. Пример:
<input type="text" name="author" id="author" value="" tabindex="1" /> <input type="text" name="email" id="email" value="" tabindex="2" <input type="text" name="url" id="url" value="" tabindex="3" />
Спам-бот ищет поля input с маркерами name=”author”, name=”email” и name=”url”. Достаточно их заменить на другие (свои, нестандартные), и спам не будет опубликован. Пример:
<input type="text" name="blogauthor" id="author" value="" tabindex="1" /> <input type="text" name="blogemail" id="email" value="" tabindex="2" <input type="text" name="blogurl" id="url" value="" tabindex="3" />
Бот не знает, что вы используете свои, нестандартные поля для ввода данных комментария, и будет искать и заполнять стандартные поля (которые, кстати, можно не удалять, просто скрыв их видимость). Понятно, что у него ничего опубликовать не получится. Но и у реального человека ничего не получится, если не изменить файл движка wp-comments-post.php, в котором указано, какие поля формы комментариев за что отвечают. Стандартные поля выглядят в нем так:
$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;
Мы же используем нестандартные поля, поэтому нужно изменить стандартные поля на наши:
$comment_author = ( isset($_POST['blogauthor']) ) ? trim(strip_tags($_POST['author'])) : null; $comment_author_email = ( isset($_POST['blogemail']) ) ? trim($_POST['email']) : null; $comment_author_url = ( isset($_POST['blogurl']) ) ? trim($_POST['url']) : null; $comment_content = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;
Таким образом реальный человек даже не заметит подмены, ему все равно, каким кодом обозначены поля формы комментирования, потому что он загружает ее на странице блога. Бот же обращается к файлу wp-comments-post.php напрямую, и пытается отправить в него данные полей, которые в нем не существуют. В итоге при попытке оставить спамерский коментарий у него ничего не происходит (просто нет таких полей, которые он пытается заполнить, и данные не передаются).
Подробнее:
Этот способ дает 100% защиту от автоматического спама, причем довольно гибкую: если какой-то скрипт специально изменили, ориентируясь на поля формы комментирования вашего блога (а в реальности никто не будет редактировать скрипт конкретно под ваш сайт, если он, конечно, не имеет миллионные показатели посещаемости), то вы можете за минуту изменить их на другие.
Однако высокая степень защиты имеет и обратную сторону – вам нужно вручную редактировать файл движка и файл темы.