Собираем
информацию
по крупицам
Новости


Новости

Ретроспективное удаление спама в самодельной гостевой книге
12-09-2017
17:05:50

Проблема спама в гостевых книгах в интернете существует очень давно. Когда-то радикальным средством борьбы со спамом на короткое время стали всевозможные защитные картинки - капчи. Но и они перестали давать должный результат - боты быстро научились перенаправлять картинки на порносайты, где их разгадывали страждущие до клубники, затем был период ипользования дешевой человечьей силы индусов по нольцелыххрендесятых цента за картинку, а потом программы распознавания, особенно специально заточенные, научились распознавать сильно зашумленные капчи не хуже человека. Блочить спам по IP теперь практически невозможно - спамеры закупают за копейки милионные пулы рандомных IP адресов, так что каждое новое сообщение будет приходить с разных айпишников.

 

В настоящее время бороться со спамом можно только комплексными мерами. Необходимо создать несколько слоев защиты: надо прикрутить капчу; написать несколько фильтров грубой аналитики, которые будут отсеивать сообщения с явными признаками спама; надо сделать хотя бы примитивный учет поведенческих факторов с привязкой к IP адресам, чтобы отсеивать мамкиных спамеров; надо сделать проверки по международным антиспамовым базам, например сделать защиту от спама с помощью stopforumspam.com.

 

По моим наблюдениям, последний пункт - самое мощное средство борьбы, но и оно работает неэффективно, если на сайт натравливается новая рекламная кампания, которая еще не успела набрать отрицательную статистику на ресурсах типа stopforumspam.com. И тут необходимо городить еще один слой защиты гостевой книги, который я называю "ретроспективное удаление спама".

 

Идея очень проста: проверять добавляемые сообщения нужно не только в момент добавления, но и периодически уже после того, как они появились в гостевой. Да, возможно спам-сообщения будут некоторое время висеть в гостевой, пока stopforumspam.com не накопит статистику, но как только это будет сделано (а делается это за пару часов), спам-сообщения будут автоматически удалены.

 

Такой механизм контроля спама хорошо подходит к редко модерируемым сайтам. Например, на этом сайте я имею возможность раз в пару недель проверять гостевую, и за это время в гостевой скапливается некоторое количество спам-сообщений, пробившихся через фильтры. Ретроспективное удаление в этом случае - единственный выход. И вот недавно я прикрутил примерно такой PHP код:

 

 

// Ретроспективное удаление спама - проверяются уже имеющиеся записи гостевой
private function retrospectSpamCheck()
{
  $days=3; // Чтобы снизить нагрузку на базу,

           // проверяются только записи, добавленные

           // в указанное последнее количество дней

  $edgeTime=time()-$days*3600*24;

  $this->db->select('id, name, email, ip');
  $this->db->where('time >', $edgeTime);
  $query=$this->db->get('guest_book');
  $messages=$query->result_array();

  foreach($messages as $message) {
    if($this->isSpam($message['name'],

                     $message['email'],

                     $message['ip'])) {
      $this->db->where('id', $message['id']);
      $this->db->delete('guest_book');
    }
  }
}

 

// Определение наличия спама через stopforumspam.com

function isSpam($name, $email, $ip)
{
  try
  {
    $data = unserialize( file_get_contents(

            'http://www.stopforumspam.com/api?&email='.

            urlencode($email).

            '&username='.urlencode($name).
            '&ip='.urlencode($ip).
            '&f=serial'));

    // Если сервис StopForumSpam не отвечает
    if($data===false)
      return false;

    if( isset($data['email']['appears']) and

        isset($data['email']['confidence']) )
      if($data['email']['appears']!=0 and

         $data['email']['confidence']>=70)
           return true; // Email в базе спаммеров

    if( isset($data['ip']['appears']) and

        isset($data['ip']['confidence']) )
      if($data['ip']['appears']!=0 and

         $data['ip']['confidence']>=70)
           return true; // IP в базе спаммеров

    return false;
  }
  catch (Exception $e)
  {
   return false;
  }
}

 

 

Конечно, здесь есть место для оптимизации, например, вместо нескольких вызовов delete в цикле, можно сначала собрать ID записей гостевой книги, а потом удалить их одним SQL-запросом. И спам через stopforumspam.com можно детектить по другим признакам, а так же учесть, что вместо нескольких запросов API stopforumspam.com поддерживает кумулятивные запросы.

 

Теперь спама в гостевой как не бывало. Считаю, что это очень простой и эффективный метод борьбы. Пользуйтесь на здоровье.

 



Интересное на сайте


Интерфейс и юзабилити » Оформление кода: Почему я выбрал для себя отступ в 2 пробела?

В мире программирования существует достаточно холиварная тема: "Каким должен быть отступ в коде"?   Оставим за бортом споры по теме "Форматироват...


Программирование на C++ и Qt » Qt: как бороться с ошибкой "Point size <= 0 (0), must be greater than 0"

Многие, кто делает программы на фреймверке Qt 4.x, может натолкнутся на то, что запущенная программа в какой-то момент начинает сыпать бесконечными пр...


Программирование на C++ и Qt » Как в Linux глобально отловить нажания клавиш в X11 (XWindow)

Несколько раз я пытался найти пример кода, который бы позволял отслеживать события нажатия и отжатия клавиш в нашем любимом X-сервере. Важный момент: ...

RSS подписка

Подпишитесь на новости сайта по RSS

Поделиться этой страницей


Статистика


О, смотри-ка какое хорошее место. Дайте два!

Внимание!


На этом сайте разрабатывается программа MyTetra и её родственные проекты. Доступны к просмотру следующие базы знаний:

 

База Xintrea (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)

База Rarrugas (1, 2)

База Balas

База YellowRaven

База Yurons

База Lesnik757

База Shandor

База Sirrichar

База Anatolean

База Аrmagedec

База SorokinRed

База Deadelf79

База Fadk

 

Требуют доработки:

 

База Tairesh

База Ivnglkv

База Kolyag87

База Andyk101

База Garik456456

База Harpokrat

База SalexIzyh

База Duwaz

 

Подробности на странице MyTetra Share.

 WebHamster.Ru
 Домик любопытного хомячка
Яндекс индекс цитирования
Почтовый ящик