yurikhan: (Default)
[personal profile] yurikhan

Прикрутил к нашему аниме-форуму автоматическую распознавалку спамных топиков. Теперь бо́льшая часть спама сразу уходит мусорку. Мелочь, а приятно.

Есть у нас форум на phpBB. С завидной регулярностью на него приходит с какого-нибудь итальянского или турецкого IP’шника робот и вываливает пачку ссылок на раскручиваемый сайт, в надежде, что Гугл увидит эти ссылки и повысит сайту рейтинг. (Гугл на эти потуги плевал с высокой ёлки, но нам-то от этого не легче…) Мы эти сообщения почти сразу уносим в отдельный раздел, баним юзера, а при рецидивах — всю сеть нарушителя (вон сегодня утром забанил Telecom Italia Net — два миллиона адресов…). Однако, надоедает. Запрещаем анонимам писать. Не помогает — робот регистрирует новых юзеров. Включаем CAPTCHA — эту дурацкую задачку на распознавание циферок-буковок. Не помогает, роботы научились читать. Следующий шаг обычно — включение активации по e-mail’у. Но это как-то не очень дружественно по отношению к живым людям.

Дык вот. У текста, сгенерированного программой, есть одно большое преимущество: его обычно можно разобрать программой. Берём среднестатистическое спамное сообщение. Как правило, в нём доххххрена ссылок на отдельных строчках, и ничего больше. Это запросто формализуется. Например, так:

// forum/includes/functions_post.php, в функции submit_post
if (preg_match("#^(\\[url=.*?\\].*?\\[/url\\][\\n\\r]*){10,}$#", $post_message))

Дальше с сообщением можно делать что хочешь. Хочешь — тихо брось его на пол, выдав стандартное Thank you for posting, чтобы пчёлы ничего не заметили. Хочешь — не менее тихо подмени в запросе к базе данных идентификатор раздела форума, чтобы оно свалилось в мусорку, и можно было его оттуда при случае достать. Хочешь — прикрути сложную логику, типа «посмотреть, не было ли раньше спама с этого IP-адреса, если был, то забанить его к чертям; если не было, но был спам из той же сети, то забанить всю сетку; вытащить из сообщения адрес раскручиваемого сайта, найти, где он хостится, и выслать модератору форума шаблон жалобы хостеру».

Впрочем, так далеко мы пока не пойдём. Вполне достаточно, чтобы мусор сам уходил в ведро:

{
  $sql_getforumname = "SELECT forum_name FROM " . FORUMS_TABLE .
    " WHERE forum_id = " . $forum_id;

  if ($result_getforumname = $db->sql_query($sql_getforumname))
  {
    if ($row_getforumname = $db->sql_fetchrow($result_getforumname))
    {
      $post_message .= "\n\n[i:" . $bbcode_uid . "]Automatically moved from " .
        "[url=http://" . $board_config['server_name'] . 
        $board_config['script_path'] . "viewforum.php?f=" . $forum_id . 
        "]" . $row_getforumname['forum_name'] . "[/url][/i:" . $bbcode_uid . "]";
    }
  }
  $forum_id = 9; // это ID’шник раздела «Мусорка»
}

Upd. Ах да. Кажется, они называют это «поисковой оптимизацией».

Date: 2006-02-13 21:29 (UTC)
From: [identity profile] eugenius-nsk.livejournal.com
Кстати, можно прикрутить еще "замусоренные картинки с цифрами". Есть куча разных реализаций, как генерящих картинку прямо тут же, так и использующих бесплатные сервера. Искать в Гугле по слову CAPTCHA.

PS. Я сейчас как раз в процессе прикручивания такой фигни к xprogramming.ru/wiki , а то тоже спам достал.

Date: 2006-02-13 21:59 (UTC)
From: [identity profile] eugenius-nsk.livejournal.com
Хм. Либо ты совсем недавно её прикрутил, либо у меня провалы в памяти :-) Вроде не так давно постил - и не видел captch-и. Да, я пользуюсь скином strict, возможно дело в этом.

Date: 2006-02-14 09:40 (UTC)
From: [identity profile] eugenius-nsk.livejournal.com
А, понятно.

Date: 2006-03-04 15:17 (UTC)
From: [identity profile] eugenius-nsk.livejournal.com
Кстати, недавно наткнулся на довольно неплохую captch-у в Mantis-е. Можно попытаться её прикрутить к phpBB.

Profile

yurikhan: (Default)
Yuri Khan

August 2018

S M T W T F S
   1234
567891011
12131415161718
19202122232425
26 2728293031 

Links

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated 2025-06-20 10:05
Powered by Dreamwidth Studios