Skip to content


WordPress: борьба со спамом

Посвящается тем, кого утомили тонны спама в комментариях, оставляемые с единственной целью – повесить ссылку на продвигаемый спамером сайт. Есть, конечно, для этого дела много разных плагинов, типа Akismet, Bad Behavior, Parasite Eliminator. Но мне больше нравится следующий простой и эффективный метод, не требующий установки никаких плагинов. Нужно просто переименовать поля формы для ввода комментария. И всё! Спамерское программное обеспечение, которое рассылает спам по блогам в автоматическом режиме, как раз и ориентируется на наличие полей в форме с определенными именами. Куда и пытается совать всякую фигню типа "Отличный блог, добавил в закладки :)" ни в коем случае на забывая оставить ссылочку. В случае с WordPress это поля comment, email, url и author. Поэтому в директории, соответствующей установленной теме, нужно отредактировать файл comment.php следующим образом.

  1. Для начала 41-ую строку
    /wp-content/themes/<ваша тема>/forms/comment.php
    1. <textarea name="comment" id="comment" rows="8" cols="40" tabindex="1"></textarea>

    меняем на:

    /wp-content/themes/<ваша тема>/forms/comment.php
    1. <textarea name="komment" id="komment" rows="8" cols="40" tabindex="1"></textarea>
  2. Далее 55-ую строку
    /wp-content/themes/<ваша тема>/forms/comment.php
    1. <input type="text" name="author" id="author" value="<?php echo $comment_author; ?>" size="22" tabindex="2" />

    меняем на:

    /wp-content/themes/<ваша тема>/forms/comment.php
    1. <input type="text" name="aftar" id="aftar" value="<?php echo $comment_author; ?>" size="22" tabindex="2" />
  3. 60-ую строку
    /wp-content/themes/<ваша тема>/forms/comment.php
    1. <input type="text" name="email" id="email" value="<?php echo $comment_author_email; ?>" size="22" tabindex="3" />

    меняем на:

    /wp-content/themes/<ваша тема>/forms/comment.php
    1. <input type="text" name="pochta" id="pochta" value="<?php echo $comment_author_email; ?>" size="22" tabindex="3" />
  4. 72-ую строку
    /wp-content/themes/<ваша тема>/forms/comment.php
    1. <input type="text" name="url" id="url" value="<?php echo $comment_author_url; ?>" size="22" tabindex="4" />

    меняем на:

    /wp-content/themes/<ваша тема>/forms/comment.php
    1. <input type="text" name="sait" id="sait" value="<?php echo $comment_author_url; ?>" size="22" tabindex="4" />
  5. Затем в файле /wp-comments-post.php меняем код, где упоминаются эти поля формы:
    /wp-comments-post.php
    1. $comment_author = ( isset($_POST['author']) ) ? trim(strip_tags($_POST['author'])) : null;
    2. $comment_author_email = ( isset($_POST['email']) ) ? trim($_POST['email']) : null;
    3. $comment_author_url = ( isset($_POST['url']) ) ? trim($_POST['url']) : null;
    4. $comment_content = ( isset($_POST['comment']) ) ? trim($_POST['comment']) : null;

    Заменяя оригинальные имена на полей на те, что придумали ранее:

    /wp-comments-post.php
    1. $comment_author = ( isset($_POST['aftar']) ) ? trim(strip_tags($_POST['aftar'])) : null;
    2. $comment_author_email = ( isset($_POST['pochta']) ) ? trim($_POST['pochta']) : null;
    3. $comment_author_url = ( isset($_POST['sait']) ) ? trim($_POST['sait']) : null;
    4. $comment_content = ( isset($_POST['komment']) ) ? trim($_POST['komment']) : null;
  6. Лично у меня после этих модификаций спам полностью прекратился. А до этого было по 15-20 штук спамерских сообщений в сутки. Хоть на сайте они и не появлялись, так как Akismet их прилежно отлавливал, но все равно нужно было вручную удалять из админки весь этот хлам, чтобы не замусоривать базу данных. Новые имена полей могут быть любыми, лишь бы они отличались от исходных.

    Недостаток такого метода в том, что после обновления WordPress изменения, скорей всего, потеряются и нужно будет либо проделать правки заново, либо пред обновлением сохранить файлы comment.php и wp-comments-post.php, а после обновления – заменить новые на старые. Кроме того, спам через trackback-и все равно пролезет. Поэтому нужно либо их запретить (например, правилами модуля Apache ModRewrite), либо поставить какой-то плагин вроде Simple Trackback Validation.

    Все это проверялось на версиях WordPress 2.9.0 и 2.9.1. Для других версий могут быть отличия в коде и в номерах строк.

Размещено в категории Howto, Веб-приложения. Теги: .

Комментариев: 12

Чтобы быть всегда в курсе здесь происходящего, Вы можете подписаться на RSS feed для комментариев на эту заметку.

  1. Yura said

    После обновления потеряются изменения только в файле wp-comments-post.php. А в файлах темы - нет.

  2. Ну а после обновления темы пропадут изменения в php файликах темы :)
    Такчто надо просто сваять какойть bash/perl/php скрипт для этого дела ... типа чтобы запустил после обновления и он все сделал как надо :)

  3. avz said

    Рационализаторская идея предыдущего оратора реализовалась в виде простенького скрипта:

  4. Валерий said

    Здравствуйте! А подскажите, можно ли в стандартную форму комментирования добавить произвольное поле, скажем для ввода номера телефона? И если можно, то как это сделать без использования плагинов комментирования.

  5. Admin said

    2Валерий: тут в двух словах не рассказать. Добавление ещё одного поля выливается в переделку всей логики вордпресса, где идёт работа с комментариями. Какие именно файлы править нужно я сказать затрудняюсь, как минимум это /wp-content/themes/<ваша тема>/forms/comment.php, остальные можно найти grep-ом по именах полей в исходниках.

  6. Валерий said

    А подскажите, пожалуйста, по какой причине при изменении имен в файле comment.php возникает сообщение " syntax error, unexpected '}' in ...полный путь к файлу комментариев моей темы". Я уж как не бился... чего не делал... все бестолку. Самое забавное, что ошибка исчезает, когда заново копирую исходный comment.php на сервер. Пытался вносить изменения не все сразу, а по отдельности, например поле "author" заменял на "author-1", а остальное не трогал. Все равно выдает ошибку. ВордПресс у меня 2.8.4 и все строки по сути совпадают с Вашими. Вообще, возникает подозрение, что происходит какая-то внутренняя проверка на совпадение размера исходного comment.php. Я вообще проделал следующий "финт ушами": в одном месте скопировал внутренний комментарий и вставил его в другой пустой строке. Результат - эта же ошибка. Но ведь комментарий ни на что не влияет!!! Поэтому возникает вопрос: что эта за внутренняя проверка и где ее можно отменить. В файлах темы я ничего такого не нахожу. Пробовал менять тему на дефолтную, вносить изменения, а затем активировать тему снова. И опять эта же ошибка!!! Подскажите, если знаете, в чем секрет?

  7. Валерий said

    Все, спасибо, сам разобрался. Оказалось, что корень всех моих злоключений - хостер, сделавший странные настройки, при которых вносить изменения в исходные файлы темы надо через админ панель ВордПресса! Вот, блин, еле допер. Я последнее время предпочитаю файлы на локальном компьютере править через Notepad2, а затем перекидывать на сервак. Разницы по сути никакой, но Notepad2 грамотно подсвечивается исходный код + предварительно на Денвере тестирую. Может эти настройки у меня на старом блоге сделаны, ввиду низкой активности?!

  8. Рустам said

    А не подскажите как изменить текст "Оставить комментарий" на другой, в форме оставления комментариев?

  9. Admin said

    Рустам, скорей всего, в файлах темы. Сделайте поиск этой строки по всем файлам блога (FAR-ом или grep-ом, например).
    У меня, например, оно встречается в wp-content/themes/_имя темы_/forms/comment.php и в wp-content/languages/ru_RU.po

  10. Roman said

    Во, как раз это я и искал, спасибо!

  11. А у меня названия полей формы комментирования пришлось менять в файле wp-includes/comment-template.php, так как в папке с темой (twenty-ten) не нашлось никаких файлов comment.php.

  12. Васян said

    Печаль - для версии 4.2.2 уже не работает. Там wp-comments-post.php уже какой-то совсем другой. Осталась вся надежда на Akismet

Some HTML is OK

(required)

(required, but never shared)

, или ответить через trackback.

Страница 1 из 11