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. Ах да. Кажется, они называют это «поисковой оптимизацией».

(will be screened)
(will be screened if not validated)
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

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-21 05:14
Powered by Dreamwidth Studios