PHP защита от спамеров - StopForumSpam на примере форума phpBB

 Сей материал является продолжением статьи "Надоела реклама, баннеры, шманнеры? hosts - Блокируем список баннерных, рекламных сетей" и посвящён PHP защите от спамеров для сайтов и форумов. Современное законодательство многих стран расценивает рассылку спама как преступление, в особо тяжких случаях ведущее к крупным штрафам или тюремному заключению виновных.

Как ранее упоминалось Везде должно быть чувство меры и всему должны быть разумные пределы, в том числе и рекламе которая в последнее время просто заполонила все места обитания челов., Итнернет не стал исключением!

PHP защита от спамеров для сайтов и форумов нынче становится очень актуальной темой потому, что в отличии от рекламного спама который уже висит на сайтах и форумах, размещённый по собственной инициативе самого владельца сайта или форума, интернет спемеров (спам ботов) желающих разместить свои мессаги становится всё больше и если с ними не воевать то вскоре сайт или форум превратится в спам свалку доверху набитую одним и тем же гавном и никакая CAPTCHA тут не поможет - спамеры наступают, они нахлабучивают!:)

Врукопашную воевать со спамерами дело утомительное и не благодарное. Многие пытаются блокировать (банить) почтовые адреса спамеров в разных модулях сайта где это возможно, блокировать IP-адреса и их диапазоны с помощью .htaccess но, это так же становится довольно утомительно и мало эффективно. Потому как многие сайты работают на PHP, то многие администраторы сайтов пытаются самостоятельно собрать БД спамеров их ИП и на этой почве замутить PHP защиту от спамеров.

Вы никогда в жизни самостоятельно не соберёте хорошую БД спамеров! Придумывать PHP защиту от спамеров не надо, она уже придумана. В сети есть сервис www.stopforumspam.com который предоставляет гибкий API для построения PHP защиты от спамеров для своего сайта или форума:

Но и тут нам подвезло, нам ненужно писать свой класс PHP API для PHP защиты от спамеров на базе данных www.stopforumspam.com, PHP API класс уже написан:

Дело за малым, бери и юзай:)).

Конфигурация PHP защиты от спамеров

Например для построения PHP защиты от спамеров для форума phpBB мы в корне форума создадим структуру директорий с филами:

|--/phpBB
    |--/...
    |--/mainlib // каталог для либ не от phpBB
        |--/StopForumSpam // каталог для либы "StopForumSpam-PHP-Lib"
            |--/log // каталог для .log файла(ов)
                |--index.html // на всяк случай
            |--/tpl // каталог с нашими шаблонами
                |--index.html // на всяк случай
                |--to_spammers.tpl // шаблон с мессагой
            |--.htaccess // для защиты диры от веб доступа
            |--config.php // конфигурация "StopForumSpam-PHP-Lib"
            |--index.html // на всяк случай
            |--README.md // описание класса "StopForumSpam-PHP-Lib"
            |--stopforumspam.php // собственно класс "StopForumSpam-PHP-Lib"
    |--/...

После того как загрузили и распаковали файлы класса (README.md и stopforumspam.php) в каталог /StopForumSpam создаём файл config.php с таким содержимым:

<?php
 
// если пришел запрос на регистрацию - ?mode=register
if($_GET['mode'] == 'register')
{
    // начальная конфигурация
    // полный путь к каталогу где лежит сей скрипт "config.php"
    $real_path = realpath(dirname(__FILE__));
    // адрес электронной почты для обратной связи.
    $email = '';
    $remoteIP = $_SERVER['REMOTE_ADDR'];
    // включаем библиотеку
    require_once($real_path . '/stopforumspam.php');
    $sfs = new StopForumSpam();
 
    // расширенная проверка
    // $args = array('email' => 'email@example.com', 
        // 'ip' => '192.168.1.1', 'username' => 'JohnDoe');
    // проверить только по ИП $_SERVER['REMOTE_ADDR']
    // SPAM IP: '109.95.73.91', '193.105.210.53' - для проверки скрипта
    $args = array('ip' => $remoteIP);
 
    // проверяем
    $spamcheck = $sfs->is_spammer($args);
    // и если спамер
    if($spamcheck)
    {
        // записываем данные о спамере
        if(@$handle = fopen($real_path . '/log/spam-log.txt', "a"))
        {
            @fwrite($handle, $remoteIP . ' - ' 
                    . date("Y:m:d h:i:s", time()) . "\r\n");
            @fclose($handle);
        }
 
        // включаем шаблон с мессагой
        require_once($real_path . '/tpl/to_spammers.tpl');
        unset($real_path);
        exit;
    }
    unset($real_path);
}

В файл spam-log.txt будут записываться ИП адрес, дата и время спамера пытавшегося запросить страницу регистрации. Данные о каждой новой попытке спамера запросить страницу регистрации будут добавляться в конец файла.

В файл шаблона to_spammers.tpl с мессагой для спамеров можно запхнуть что-то примерно такое ОБРАЩЕНИЕ К СПАМЕРАМ! / MESSAGE TO SPAMMERS!:

Обращение к спамерам всех стран и континентов.

Уважаемые Спамеры!

Этим письмом я хочу засвидетельствовать свое почтение и уважение к вашей
нелегкой работе.

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

Я в совершенстве овладел Американским Английским, Американским Албанским и Американским Украинским языками, посетил все предложенные бизнес-семинары и обладаю высшим посвящением в девяти церквях.

Увеличив половой член до полутора метров и скачав все порносайты через новые, высокоэффективные интернет-каналы, я поначалу слегка растерялся, но благодаря предложенным вами медицинским препаратам, которые мне доставили из США в кратчайшие сроки я успокоился и даже повысил своюсамооценку.

Я получил такие значительные скидки на программное обеспечение, что
практически целиком прибрал к рукам это направление в бизнесе.

Я также купил все предлагаемые книги, и воспользовался вашими предложениями по рекламе, теперь все это барахло у меня покупают во всем мире, и мои доходы позволили мне купить в собственность несколько африканских государств.

Все барахло я вывожу в свои африканские страны, и в этом мне помогают
рекомендованные Вами ГРУЗЧИКИ.

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

Как видите, я - верный, постоянный и оптовый ваш клиент. Я никогда не спорю, я делаю все, что вы мне советуете. Не могу ли я, учитывая свой теперешний статус, попросить и вас о небольшой ответной услуге? Дело в том, что на протяжении полугода я не получил от вас ничего нового. Все, что вы мне предложили за последние 6 месяцев, у меня уже есть.

Напомню, что мой член увеличен (благодаря вам) до полутора метров, причем в спокойном состоянии! При этом, учтите, что всю предлагаемую вами "виагру" я приобрел и сохранил.

Теперь главное, о моей просьбе: СПАМЕРЫ, ИДИТЕ НАХ..!

В .htaccess как обычно вписываем Deny from all.

Подключение PHP защиты от спамеров к форуму phpBB

Подключать PHP защиту от спамеров ко всему форуму нежелательно, лучше это сделать в тех местах где это будет более оправдано например в скрипт регистрации или комментариев. Подключение нашей PHP защиты от спамеров к форуму не составит особого труда, в нашем случае мы в корне форума phpBB находим и открываем ucp.php и подключаем туда наш config.php:

<?php
require_once('mainlib/StopForumSpam/config.php');
/**
*
* @package ucp
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

Если заметили в config.php есть переменные $email и $remoteIP которые можно использовать в шаблоне. Использовать свой почтовый адрес как есть не рекомендуется, лучше его как-то скрывать. Боты как правило стилями оформления не пользуются и в связи с этим мы например можем перевернуть строку с помощью $email = strrev("my@email.ru"); и корректно отобразить её с помощью style="unicode-bidi: bidi-override; direction: rtl;":

<?php
$email = strrev("my@email.ru");
?>
<span style="unicode-bidi: bidi-override; direction: rtl;">
    <?php echo $email; ?></span>

Но я предпочитаю со спамерами не связываться и дополнительной информации им не предоставлять!:)) Вот и всё "любі друзі", вот мы и замутили PHP защиту от спамеров для нашего phpBB форума на БД StopForumSpam, а если нет возможности использовать на хосте сетевые РНР функции, то можно скачать БД спамеров с StopForumSpam и расширить РНР класс замутив РНР функцию проверки пришедшего юзера локально, что разумеется скажется на РНР производительности но, об этом как-нибудь в другой раз...

Автор: Олег Головский


Комментарии   

Adminco
0 #5 Adminco 26.11.2012 17:47
Вроде помогает )
Цитировать
Titan ogame
0 #4 Titan ogame 27.10.2012 14:54
Спасибо, наконец то я уже неделю не знаю что такое спам на форуме и выгребание этого говна
Цитировать
Stranger
0 #3 Stranger 05.06.2012 21:58
ха-ха... видимо кто-то уже просёк эту тему и решил замутить платный сервис типа "защита сайтов от спама" - cleantalk.ru

:lol: токо нафиго ж платить когда есть такая замечательная инструкция!
Цитировать
АдМинь БагоИскатель
0 #2 АдМинь БагоИскатель 04.06.2012 11:45
Можно слегка дополнить установкой часового пояса, имхо реальное время попыток регистрации спамера на сервере может отличатся от реального времени попытки регистрации в твоём часовом поясе!:
Цитата:
// Установка часового пояса если используется РНР выше 5.1
// В РНР выше 5.3 не установка часового пояса при использовании
// функции date() повлечёт ошибку:
//    Severity: Warning
//    Message: date(): It is not safe to rely on the system's
//    timezone settings. You are *required* to use the date.timezone
//    setting or the date_default_timezone_set() function. ....
if(@!date_default_timezone_set('Europe/Kiev'))
{
    @ini_set('date.timezone', 'Europe/Kiev');
}
Полный список поддерживаемых часовых поясов (timezone) смотреть на: http://php.net/manual/ru/timezones.php
Цитировать
Spam Warrior
+1 #1 Spam Warrior 31.05.2012 02:06
;-) Автору респект! Просто супер секель для спамеров. В логах по 10-20 отрубленных спамеров, а на форуме тишь да благодать. До этого каждый день выметал спамеров и ни что против них не спасало, а ни каптча, а ни смена вопроса-ответа.

;-) Ещё раз автору респект!
Цитировать

Добавить комментарий


Защитный код
Обновить

4 megabytes