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


Новости

Ретроспективное удаление спама в самодельной гостевой книге
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 поддерживает кумулятивные запросы.

 

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

 



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


Статистика


RSS подписка

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


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