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. Для других версий могут быть отличия в коде и в номерах строк.

    Похожие заметки:

    1. Тонкая настройка wordpress
    2. Внедряем Captcha в CuteNews
    3. Штучки с sed-ом
    4. Детальное логирование в Samba

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

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

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

  1. Yura said

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

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

  3. avz said

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

Some HTML is OK

(required)

(required, but never shared)

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