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.
/home/yan/snap/opera/79/.config/opera/File System/