Нет автоматическому спаму
Сегодня меня окончательно достал автоматический спам в комментариях: Akismet пропустил десяток спамных комментариев от всяческих "Гинекологов" с сообщениями типа "Очень было интересно читать, спасибо!" и "Даже моей маме понравилось :))". Плюс несколько десятков спамных комментариев он поймал, но ежедневно просматривать попавшие в спам комментарии на предмет попадания туда по ошибке нормального комментария меня утомило. Варианты с премодерацией и обязательной регистрацией в блоге я не рассматриваю - премодерация не отменит необходимости просмотра спама, а обязательная регистрация в блоге автоматом снизит активность комментирующих раз в 10 минимум. Установка капчи меня также не устраивает: во-первых, она тоже снижает активность читателей блога, ну и во-вторых, что будет с вашим комментарием, если вы ошиблись в вводе капчи? Правильно, текст уже написанного комментария исчезнет. Такой фигней страдают практически все анти-спам плагины. У того же
Я пересмотрел сегодня пару десятков анти-спам плагинов - "человеческих" среди них нет. Такие плагины по большей части вредят именно нормальным посетителям блога, но никак не спамерам, которым потеря комментария в одном из десятков тысяч блогов никак не страшна. Единственную "человеческую" капчу я увидел в блоге
Первое: весь классический спам с 2-мя или больше ссылками в сообщении, а также весь зарубежный спам ловится тем же Akismet'ом на ура и о нем беспокоиться не стоит.
Второе: грамотный ручной СМО-спам отловить можно только зайдя на сайт комментирующего и не иначе. Многие блогеры оставляют такие спамные комментарии у себя в блоге, если сообщение действительно оставлено по теме и состоит не из 2-х слов. Ловить автоматом такие комментарии невозможно в принципе.
Третье: автоматический СМО-спам, получивший просто невероятный размах в последнее время. Характеризуется нейтральными комментариями, которые можно разместить почти в любом блоге. Ловится Akismet'ом, но только в конечной стадии распространения. То есть когда такой комментарий уже пометят как спам несколько сотен блогеров.
Как видно, наибольшие проблемы доставляет автоматический СМО-спам и именно с ним мы будем бороться. Чем он характеризуется кроме как нейтральными текстами комментариев? Тем, что он заточен под блоги на WordPress. Именно WordPress предоставляет возможность оставить ссылку на сайт комментирующего плюс это самый популярный блог-движок среди автономных блогов. Заполнить скриптом форму комментирования в блоге под управлением WordPress легче простого - названия ее полей не нужно даже распознавать, они заранее известны и любой школьник может за полчаса накатать автоматическую постилку в комментарии. Так что самый простой способ отсечь спам-скрипты это обмануть их, подсунув левое поле для заполнения, а в действительности, использовав другое поле, не со стандартным именем.
Идею подглядел
Сначала открываем файл comments.php вашего шаблона и ищем там что-то похожее на:
<textarea name="comment" id="comment" cols="61" rows="13" class="textarea"></textarea> |
Меняем эту строчку на:
<div class="smo"><textarea name="comment" id="comment" cols="61" rows="13" class="textarea"></textarea></div> <textarea name="real-comment" id="real-comment" cols="61" rows="13" class="textarea"></textarea> |
Теперь открываем файл style.css вашего шаблона и добавляем туда строчку:
.smo {position: absolute; left: -1000px;} |
Что мы сделали? Поле по умолчанию для текста комментария мы сделали невидимым (сдвинув его на 1000 пикселей вне экрана) и добавили новое точно такое же поле, но с именем real-comment. Почему бы просто не сделать поле hidden? Потому, что hidden очень легко можно распознать, а вот до анализа css-стилей спам-скрипты пока что не доросли. Конечно, спам-скриптам не составит труда заполнить оба поля, поэтому необходимо еще исправить и файл движка wp-comments-post.php - найдите там строки:
35 36 37 38 | $comment_author = trim(strip_tags($_POST['author'])); $comment_author_email = trim($_POST['email']); $comment_author_url = trim($_POST['url']); $comment_content = trim($_POST['comment']); |
И замените их на:
35 36 37 38 39 40 | $spam_test_field = trim($_POST['comment']); if(!empty($spam_test_field)) wp_die('Спаму нет!'); $comment_author = trim(strip_tags($_POST['author'])); $comment_author_email = trim($_POST['email']); $comment_author_url = trim($_POST['url']); $comment_content = trim($_POST['real-comment']); |
Собственно, больше ничего делать и не надо. Теперь, если спам-скрипт заполнит текстовое поле comment комментарий не будет добавлен. Для большей безопасности вам стоит поменять имя css-класса smo и имя настоящего текстового поля для текста комментария real-comment. Если вы используете какие-нибудь сторонние плагины для комментариев вроде Filosofo Comments Preview, то вам необходимо и там сменить comment на real-comment. Проверить работу хака очень легко: просто удалите из style.css строчку с .smo, обновите страницу комментариев в вашем блоге и попробуйте отправить комментарий с заполненным первым текстовым полем - если вы все сделали правильно, то вы не сможете разместить комментарий.
Забавно, но такой маленький хак уменьшает количество автоматического спама на 99% и ни малейшим образом не мешает настоящим комментаторам оставлять свои сообщения. Надеюсь, этот хак вам поможет в борьбе со спамом. Если есть какие-нибудь вопросы - оставляйте комментарии, буду рад ответить :)
PS. Прошел почти год после установки хака - ни единого автоматического спам-комментария не прошло. Конечно, это не помешало особо умным товарищам вручную нафлудить пару сотен спамных комментариев. Но что такое несколько сотен мусорных комментариев за год работы блога? Абсолютно ничего. Если бы не хак весь блог был бы завален тысячами и тысячами спамными комментариями, так что пользуйтесь и радуйтесь отсутствию спама.
Понравился пост? Подпишись на обновления по RSS или Twitter !
Https://damki.biz/ damki.biz |
#161,
Оу. спасибо большое, наконец-то не будут мелькать тысячи спамных комментов
#162,
Есть сайт можно сказать заглушка с двумя статьями, его ещё яндекс не нашёл зато хрумеры отыскали. Каждый день сыпятся спамные комментарии. Можно ли как то полностью отключить комментарии путём изменения кода?
#163,
параметры\обсуждение - отключить комментарии?