Chase Your Dreams!

Christian Archer

  • Home
  • Profile
  • Friends
  • Forums
  • Gallery
  • Homepage
  • Copyright
Twitter Facebook RSS

Еще одна избегалка спама

Posted on December 1, 2009 by SunChaser
10 CommentsLeave a comment

Раз уж Dandr решил опубликовать мой способ, надо бы сделать канонический вариант инструкции.

Итак. Смысл — боты обычно не заполняют форму на сайте, а шлют запрос напрямую файлу wp-comments-post.php. Спрячем его.

1. Подготовим ему замену

файл wp-comments-nospam.php (имя файла не важно, лишь бы было везде одинаковым)
dandr, про индивидуальноcть названий — разумное замечание

это должен быть php-файл, запускающий wp-comments-post.php
<?php
include('wp-comments-post.php');
?>

или

символическая ссылка на wp-comments-post.php
в шелле: ln -s wp-comments-post.php wp-comments-nospam.php

или

просто переименовываем wp-comments-post.php в php-comments-nospam.php

Замечание: в отличие от предыдущих, в этом способе придётся переименовывать также и после каждого обновления WordPress

2. Защитим старый файл

вносим в .htaccess такой код:

<Files wp-comments-post.php>
order allow,deny
deny from all
</Files>

Замечание 1: если у вас отключен доступ к файлу .htaccess, поможет только переименование

Замечание 2: если вы переименовываете файл, пункт становится необязательным (но всё равно желательным — вдруг забудете при очередном обновлении)

3. Направим комментарии в новый обработчик

Надо немного подкорректировать тему, а именно файл (обычно) comments.php

Находим форму добавления комментария. Обычно это кусок кода вида

<form action="wp-comments-post.php" method="post"...

заменим имя файла в поле action:

<form action="wp-comments-nospam.php" method="post"...

Замечание: есть способ для параноиков — подменять имя файла в динамике джаваскриптом. 100% защиты от ботов и юзеров без джаваскрипта.

4. OpenID

Если вы используете плагин WP-OpenID, ему нужно персонально указать файл обработчика. Сначала надо было править код плагина (из-за этого я отключил у себя когда-то этот способ, точнее когда wp-openid бешено обновлялся каждые 2 дня), но теперь всё намного проще:

в wp-config.php добавляем

define(‘OPENID_COMMENTS_POST_PAGE’, ‘wp-comments-nospam.php’);

Наличие этой опции доказывает, что не я первый додумался :-D

Всё! Имеем профит, не имеем спама, хотя кое-какие боты похоже начали догадываться, тем не менее уменьшение спама в разы гарантированно.

  • Share this:
  • Email
  • ВКонтакте
Categories: Howtos, WordPress | Tags: spam
The Daily WTF
Я похож на Джобса O_o А ты?

10 Responses to “Еще одна избегалка спама”

  1. Dandr says:
    December 1, 2009 at 20:36

    >dandr, про индивидуальноcть названий — разумное замечание
    А то ж!
    В противном случае – не имеет смысла: ботам просто нужно будет подставить другое (шаблонное) имя файла.

    Reply
    • SunChaser says:
      December 1, 2009 at 20:41

      да, конечно =)

      Reply
  2. Сергей М. says:
    December 19, 2009 at 15:16

    Дык и простым парсером можно найти, куда отправлять спам =)

    Мы еще усложняли задачу, добавляя еще смену имени текстарея http://habrahabr.ru/blogs/wordpress/44350/ (в комментах – с почасовой), но это обходится точно таким же парсом )). Да и давно бы пора переписать пост так, чтобы не хачить дополнительно файл – можно подключаться через хук.

    Reply
    • SunChaser says:
      December 19, 2009 at 16:04

      аригато. надо поразбираться на досуге

      Reply
    • SunChaser says:
      December 19, 2009 at 16:05

      оффтоп: а лишнего инвайта на хабру нету? *shy*

      Reply
    • Dandr says:
      December 19, 2009 at 19:23

      Подмена полей защищает гораздо лучше, но трабл в том, что придётся править плагины, которые работают с текстареа: обращение по имени, цитирование, смайлы, в конце концов.
      Соответственно, после обновления плагина (как WP) процедуру правки придётся повторять. Муторно это.

      Reply
      • SunChaser says:
        December 19, 2009 at 19:43

        > обращение по имени, цитирование, смайлы

        хм… а что-то еще? я в принципе этим не пользуюсь, так что можно было бы мне-то поюзать… хотя опять-таки openid скорее всего это юзает

        но тут возникает другая идея — что суррогатный wp-comments-post будет не только инклюд делать, но и некую фильтрацию проводить

        типа
        if($_GET[text])
        {
        die(‘иди нахрен, спамер!’);
        }

        $_GET[text]=$_GET[nospamtext];

        получаем опять что-то с максимальной совместимостью со стандартами

        Reply
        • Dandr says:
          December 19, 2009 at 20:24

          Собственно, всё. Но с автоапдейтом фича не совместима.
          Впрочем, есть какой-то плагин для автоматизации процесса. Ща постараюсь найти.

          Reply
          • Сергей М. says:
            December 20, 2009 at 07:37

            Ну, айдишник для плагинов с джаваскриптом останется тем же, а чтобы сохранить имя переменной для пхп-юза:

            add_filter(‘pre_comment_author_name’,'againstspam’,1);
            function againstspam($name){
            if(!empty($_GET['content']))
            wp_die(‘spammer’);
            $_GET['content']=$_GET['newfieldname'];
            return $name;
            }

            Т.е. еще до любых фильтров обработки имени мы реализуем защиту, а потом все идет с теми же переменными, что и обычно. А т.к. пишем мы эту фигню в functions.php нашей темы (или любой плагин), то обновлять и хачить wp-comments-post не надо.

            Reply
  3. Dandr says:
    December 19, 2009 at 20:26

    погугли Antispam Bee – сам пока не смотрел.

    Reply

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

*

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

  • Similar Posts

    • WP-OpenID и закон подлости
    • WP OpenID теперь еще и источник
    • WordPress and Spam
    • WordPress OpenID / PHP 5.4
    • Как отключить Akismet?
  • Blogroll

    • Блог android разработчика
  • FeedBurner

  • Calendar

    December 2009
    M T W T F S S
    « Nov   Jan »
     123456
    78910111213
    14151617181920
    21222324252627
    28293031  
  • Archives

  • Categories

    • ? (1)
    • Bookmarks (15)
    • Culture (186)
      • Books (10)
      • Comics (1)
      • Holidays (1)
      • Law (3)
      • Linguistics (13)
      • Movies and TV (45)
      • Music (25)
      • Nippon (47)
        • Anime (43)
      • Politics (25)
      • Quotes (20)
      • Religion (3)
      • Science (15)
      • Video (16)
    • Development (38)
      • Design (4)
      • Qt (4)
      • Ruby (1)
      • Web Development (19)
    • Fun (75)
    • IT (218)
      • Cross-site Connectivity (11)
        • oEmbed (2)
        • OpenID (9)
      • Games (15)
      • Howtos (11)
      • Instant Messaging (38)
        • Jabber (26)
      • Internet Misc (37)
      • Linux (46)
      • Multimedia (3)
      • Phones (1)
      • Windows (21)
        • Linux Software in Windows (4)
      • WordPress (13)
      • XML (4)
    • Miscellaneous (43)
    • Personal (95)
      • Blog Flashmob (2)
      • Random Thoughts (25)
      • Secret Wishes (3)
      • Travel (3)
    • Pictures (20)
      • Gallery Updates (10)
      • Photography (3)
  • Recent Comments

    • SunChaser on DNS Service
    • Johan on DNS Service
    • SunChaser on DNS Service
    • SunChaser on DNS Service
    • SunChaser on DNS Service
  • Forum Topics

    • Jabber Server
  • SunChaser on Twitter

    • RT @xenia_sobchak: Якеменко публичноотказал мне во вступлении в его партию.как жить дальше?есть ли смысл?обьявляюУстричную голодовку по ... 13 hours ago
    • @ilyabirmannet Most likely he uses some third party caching plugin 15 hours ago
    • RT @read_the_tweet: Вовочка очень хотел конфету, но отдал её Маше, потому что Машу он хотел больше. 16 hours ago
    • RT @KermlinRussia: Скоро начнут людей на улицах хватать и назначать полпредами. 3 days ago
    • @kwizme_en spare 3 days ago
© 2006-2012 by Christian Archer Proudly Powered by WordPress | Nest Theme by YChong
loading Cancel
Post was not sent - check your email addresses!
Email check failed, please try again
Sorry, your blog cannot share posts by email.