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.

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

Вы комментируете как Гость.
Комментарии блога
  • Алексей

    30. Апрель, 2017
    MC практически полностью устраивает за исключением функциональности...
  • Савелий

    Савелий

    06. Март, 2017
    Логияно что ОР3Т первый идет. Реально на андроиде самый лучший. И по тесту антуту самый мощьный. Очень рад, что его приобрел.
  • Евгений

    Евгений

    17. Февраль, 2017
    Спасибо за статью, мне ваши советы очень помогли, когда я регистрировал домен у хостера Handyhost)
  • BrainStorm

    BrainStorm

    15. Февраль, 2017
    Согласен, особенно после обновления Я.Вебмастер и учащения апдейтов Яндекса.
  • Кирилл

    11. Февраль, 2017
    Яндекс метрика в связке с Яндекс.Вебмастер это бомба, очень удобно....
  • Сергей

    Сергей

    08. Февраль, 2017
    "...В планах разработчиков было создать специальный программный продукт,...
  • Kladproraba

    Kladproraba

    30. Январь, 2017
    Вопрос о том, как выбрать идеальное доменное имя, действительно очень...
  • BrainStorm

    BrainStorm

    16. Декабрь, 2016
    Однажды мое знакомство с программой очень быстро закончилось, когда решил...
  • Артем

    Артем

    18. Октябрь, 2016
    Спасибо большое за обзор!
  • kitoboi

    kitoboi

    09. Октябрь, 2016
    На сколько эффективна по вашему программа ccleaner professional plus?
Подпишись и ты!
Яндекс Виджет
Последняя работа

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