adCMS решаем проблему со спам комментариями

Надоело ждать решений от разработчиков adCMS по усилению защиты движка, в том числе и от спаммеров, постящих комментарии сотнями. В этой статье я предложу свое решение проблемы.

Немного об AdCMS

adCMS - система управления контентом, разработанная для создания товарных витрин и купонных сайтов и заработка в сети партнерских программ Admitad. Движок платный, имеет две редакции:

  • adCMS Товары - позволяет создать партнерский интернет-магазин на основе выгрузок товаров из популярных интернет-магазинов, как наших, так и забугорных. Заходите в admitad, подключаетесь к нужной партнерской программе, которая предоставляет вебмастерам в качестве инструмента актуальную CSV или XML выгрузку товаров. В adCMS вбиваете ссылку на полученную выгрузку и загружаете в нужную категорию полную товарную выгрузку, что позволит поднять копию выбранного интернет магазина, только вместо "купить", добавляющей товар в корзину в шаблоне движка будет стоять ваша партнерская ссылка на товар партнерского интернет-магазина. При клике на кнопку "купить", посетитель считается "вашим" покупателем и если он что-то купит на сайте-партнере, вы получите выплату - процент или фиксированную сумму с покупки, оговоренную в условиях программы в Адмитад.
  • adCMS Купоны - позволит вам создать купонный сервис, на основе фида (RSS, CSV, XML) купонов на скидку от партнеров, к которым вы подключены в системе. Таким образом вы получаете каталог купонов с актуальными акциями и распродажами интернет-магазинов. Если посетитель кликнет по ссылке Купить перейдет на сайт партнера и купит товар, участвующий в данной акции, то вы также получите вознаграждение в личном кабинете Admitad.

В состав обоих сборок adCMS входит модуль Комментарии, который позволяет получать от посетителей сайтов комменты или отзывы на новости, товары или купоны. Но защита этих модулей слаба, имеется всего лишь капча, которую на сегодняшний день не сложно подбирать с помощью сервисов антикапч. Поэтому на сайтах на базе АДЦМС серьезная проблема со спамом в комметариях. Когда у вас партнерская витрина с сотней тысяч страниц товаров и когда об этом прознали спаммеры, то начинается полный кошмар. Единственным вариантом борьбы со спамом является премодерация комментов, они не публикуются на сайте до вашей проверки и одобрения в админке сайта. Но когда спам-комментарии добавляются сотнями в день, это тоже становится проблемой.

Суть проблемы - спам в комментариях

Мне надоела эта ситуация с чрезмерным спамом и с огромным списком (постоянно обновляющимся) IP адресов в файле .htaccess, которым заблокирован доступ. Я решил доработать модуль Комментариев AdCMS. Есть такой зарубежный сервис - база спамеров - stopforumspam.com, который возник как решение по борьбе со спамом на популярных форумных движках, к которым разработаны плагины, позволяющие вручную или автоматически добавлять злостного спамера в базу StopForumSpam. В последствие эта база разрозлась и появилась возможность проверять зарегистрировавшегося пользователя или нового комментатора по базе на основе его IP адреса, E-mail'а, имени пользователя. Т.к. у этого сервиса имеется API, то можем воспользоваться им для проверки комментатора по IP на наличие в базе спамеров. Если будет найдено хоть одно упоминание айпишника или имени пользователя, то запрещаем добавление этого комментария. Это позволит хоть в какой-то степени снизить поток спама, тем более когда спамеры используют для постинга различное программное обеспечение для так называемого прогона по сайтам - типа Xrumer и AllSubmitter.

Решение для AdCMS Товары

Нам нужно подключиться к сайту по FTP, найти папку с модулем комментариев и открыть на редактирование файл:

/modules/comments/comments.class.php

В этом файле нужно найти функцию, которая производит обработку комментария, отправленного посетителем через форму на страницах сайта, а именно найти такую строчку:

private function process_comments_form()

Внутри этой функции (между фигурными скобками), скажем после блока:

//защита от добавления коммента от имени админа сайта
if ($cmnt_name == comments::ADMNAME)
{
  $addok=false;
  $content .=$this->get_template_block('msg_no_admin_comments');
  $kernel->pub_session_unset('cmnt', $kernel->pub_module_id_get());
}

нужно добавить следующий код:

      $is_spam = 0; // индикатор спама
      $stopforumspam_url = 'http://api.stopforumspam.org/api';
      $spammer_data = array(
        'username' => array(
          urlencode(htmlspecialchars($cmnt_name))
        ),
        'ip' => $_SERVER['REMOTE_ADDR'],
        'badtorexit' => 1,
        'serial' => 1
      );
      $spammer_data = http_build_query($spammer_data);

      $ch = curl_init($stopforumspam_url);
      curl_setopt($ch, CURLOPT_POST, 1);
      curl_setopt($ch, CURLOPT_POSTFIELDS, $spammer_data);
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
      // получаем данные из базы stopforumspam
      $result = curl_exec($ch);
      curl_close($ch);
      $r = unserialize($result);

      // если запрос выполнен успешно
      if ($r['success'])
      {
        // если имя пользователя встречается хоть один раз,
        // то увеличиваем счетчик спама
        foreach ($r['username'] as $u)
        {
          if ( $u['appears'] > 0 ) $is_spam++;
        }
        // если IP встречается хоть один раз,
        // то увеличиваем счетчик спама
        foreach ($r['ip'] as $ip)
        {
          if ($ip['appears'] > 0) $is_spam++;
        }
      }
      
      // Если счетчик спама не нуль
      if ($is_spam > 0)
      {
        //Это спам! Предотвращаем добавление комментария
        $addok=false;
      }

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

      // Если счетчик спама не нуль
      if ($is_spam > 0)
      {
        //Это спам! Предотвращаем добавление комментария
        $addok=false;
        // Формируем текст E-mail уведомления
                $subj = "Новый спам-комментарий";
                $body = "<html><body>На страницу <a href='".$_SERVER["REQUEST_URI"]."'>".$_SERVER["REQUEST_URI"]."</a> добавлен спам-комментарий<br/>Имя: ".htmlspecialchars($cmnt_name)."<br>Текст: ".nl2br(htmlspecialchars($cmnt_txt))."<br/>IP: " . $_SERVER['REMOTE_ADDR'] . "<br/>User-agent: " . $_SERVER['HTTP_USER_AGENT']  ."<br/>Referer: " . $_SERVER['HTTP_REFERER'] . "</body></html>";
                // Отправляем письмо админу о попытке спама
                $this->send_admin_email($subj,$body);
      }

Решение для AdCMS Купоны

Для купонной сборки вышеуказанный код также должен работать, т.к. обе редакции имеют одинаковые модули с таким же функционалом.

После приведенной модификации спама на сайтах на базе AdCMS станет заметно меньше. Надеюсь это решение кому-то поможет и разработчики внедрят его в CMS.

Оставить комментарий

Вы комментируете как Гость.
Комментарии блога
  • Игорь
    12. Май, 2022
    Здравствуйте. Вы не подскажите, как сделать сбор всех комментариев в одном...
  • KR. Laboratories
    26. Декабрь, 2021
    Спасибо за полезную статью! Еще можно посоветовать воспользоваться...
  • irmaseo.ru
    09. Октябрь, 2020
    Очень полезная информация, спасибо
  • yan
    yan
    27. Июнь, 2020
    на manjaro может кому пригодится

    /home/yan/snap/opera/79/.config/opera/File System/
  • вася
    вася
    21. Июнь, 2020
    благодарочка
  • Владимир
    Владимир
    13. Апрель, 2020
    А как быть с андроидом? На планшете памяти хватило только на этот...
  • Владимир
    Владимир
    01. Апрель, 2020
    Вообще не помогло. Atheros как отваливался, так и отваливается. Каждый раз...
  • Дмитрий
    Дмитрий
    24. Февраль, 2020
    Спасибо. Думал не найду. 5 часов времени. Драйвера раза четыре переустанавливал. А все так просто было.
  • Алексей
    Алексей
    04. Сентябрь, 2019
    Лучше использовать универсальный способ создания карты сайта, на сайте частника Константина Гайдука есть инструкция.
  • dfgdrfg
    dfgdrfg
    05. Апрель, 2019
    ну и дерьмо эта мега, это словами не передать какой шлак
Подпишись и ты!
Яндекс Виджет
Последняя работа

Услуги
Контакты
  • Тверская область
  • г. Вышний Волочек
  • ул. 9-го Января, д.21, кв. 107
  • info@brain8torm.ru
  • brainstorm@programist.ru
  • +7 (915) 734-3849
  • +7 (904) 350-9777