Борьба со спамом или превращаем спамера в постоянного комментатора
Об этой идее мне рассказал Дима (Dimox). Откуда он её взял, спрашивайте у него.
Мне лишь удалось реализовать её для WordPress.
Основная борьба сейчас идет с ручным спамом. Это такие комментарии, которые публикуются вручную и, следовательно, их довольно сложно определить. Блогер вынужден решать: считать ли текст «Отличная идея! Спасибо!» спамом или искренним отзывом. Большинство из нас в таких случаях проверяют ссылку комментатора и если сайт более-менее нормальный, то разрешают комментарий.
Но не секрет, что то количество говносайтов, которое заполонило рунет делают такую проверку довольно сложной. Продажа ссылок заставляет «бизнесменов» делать такие сайты, которые довольно сложно отличить от нормальных.
Цель спамера - получить ссылку с вашего сайта. И вот здесь кроется основной секрет идеи. Спамер - скорее всего будет случайным посетителем, поэтому его ник, адрес или email будут единичными. Из всего этого следует, что отображать ссылку нужно только у тех, кто оставил несколько комментариев.
Основная проблема в реализации этого алгоритма состоит в том, что WordPress не содержит механизмов идентификации комментаторов. Поэтому если взять за ключ пару «url+email», то придется проверять её наличие в базе данных у каждого комментатора. Простой SQL-запрос который нужно выполнять у каждого коментатора (которых может быть много) приведет к серьезной нагрузке на сервер. Например при 30 комментариях вы получите +30 запросов.
Всё это конечно же не годится.
Потратив примерно неделю, я всё-таки придумал алгоритм, который выполняет нужные действия и требует всего один дополнительный запрос к БД. Если кратко, то предварительно формируется массив из «ключ = количество» (где ключ = url+email), а уже при выводе комментария эти значения сверяются с данными комментатора и если их количество больше заданного, то выводится ссылка.
Чтобы добавить эту возможность в ваш блог нужно скачать и скопировать в каталог шаблона файл «maxsite-comment-allow.php».
После этого откройте файл «comments.php». Найдите строчку:
<?php foreach ($comments as $comment) : ?>
Добавьте перед ней код, чтобы получилось так:
<?php require (TEMPLATEPATH . '/maxsite-comment-allow.php') ?> <?php foreach ($comments as $comment) : ?>
Теперь чуть ниже найдите вызов функции comment_author_link():
<?php comment_author_link();?>
Вместо этого нужно написать так:
<?php maxsite_comment_allow($maxsite_comment_data, 3, true); ?>
Число 3 указывает на минимальное количество комментариев для отображения ссылки. Последний параметр (true или false) разрешает отображать общее количество комментариев у данного автора. Первый параметр не меняем - в нем данные ключей.
Для ключа я использовал пару «url+email». Пришлось сознательно отказаться от ника, потому что многие авторы указывают его с разным регистром букв, а то и переставляют в нем буквы и слова (например имя и фамилия). Поля email и url в этом плане более «устойчивы».
Постоянная ссылка: http://maxsite.org/?p=365
Версия для печати
