Exile
Administrator
Привет.
Продолжаем серию статей о том, что появится в новой мажорной версии проекта.
Сегодня поговорим о давно назревшей теме – защите от спама. Раньше с ботами и спамерами каждый администратор разбирался сам: ставил капчу, банил вручную, чистил базу. В версии 3.0 мы встроили в движок полноценную подключаемую систему проверки пользователей и контента с поддержкой нескольких внешних провайдеров.
Типичный сценарий: спамер регистрируется через Tor или прокси, создает с десяток тем с SEO-ссылками, рассылает ЛС другим пользователям – и все это за пару минут. Пока администратор заметит и забанит – вред уже нанесен.
Этого достаточно, чтобы отсечь большинство типового спама. Akismet и Project Honey Pot подключаются при необходимости через API-ключи.
Продолжаем серию статей о том, что появится в новой мажорной версии проекта.
Сегодня поговорим о давно назревшей теме – защите от спама. Раньше с ботами и спамерами каждый администратор разбирался сам: ставил капчу, банил вручную, чистил базу. В версии 3.0 мы встроили в движок полноценную подключаемую систему проверки пользователей и контента с поддержкой нескольких внешних провайдеров.
Что было
Никакой встроенной защиты от спама в TorrentPier не было. Максимум – капча при регистрации и ручная модерация. Если бот проходил регистрацию, он мог свободно постить спам, рассылать личные сообщения, а администратор узнавал об этом постфактум, когда форум уже был засорен.Типичный сценарий: спамер регистрируется через Tor или прокси, создает с десяток тем с SEO-ссылками, рассылает ЛС другим пользователям – и все это за пару минут. Пока администратор заметит и забанит – вред уже нанесен.
Что стало
В версии 3.0 появилась подключаемая система проверки спама с шестью провайдерами, двумя уровнями решений и четырьмя точками интеграции. Проверки выполняются автоматически, без участия пользователя.Провайдеры
Провайдеры – это источники данных для принятия решений. Каждый отвечает за свою область. Можно включить один, можно все сразу – результаты агрегируются, побеждает самый строгий вердикт.- BannedUsers – проверяет IP и email по локальной бан-листе. Работает без внешних запросов, мгновенно.
- SpamPhrases – ищет стоп-слова в тексте сообщений. Поддерживает точное совпадение по границам слов и регулярные выражения. Удобно для блокировки типичных спам-паттернов вроде ссылок на казино, криптобиржи и прочий мусор.
- StopForumSpam – один из крупнейших спам-реестров в интернете. Проверяет IP, email и username по базе данных известных спамеров. Поддерживает два порога:
moderate_threshold(отправить на модерацию) иdeny_threshold(заблокировать полностью). - Project Honey Pot – DNS-проверка угроз по базе httpBL. Определяет тип угрозы (harvester, comment spammer, подозрительный IP) и уровень опасности. Работает только с IPv4.
- DNS Blacklist – проверка IP по настраиваемым DNSBL-зонам. Можно подключить любые публичные или приватные блеклисты.
- Akismet – API от создателей WordPress, заточенный под определение спама в тексте. Проверяет не только IP и email, но и сам контент сообщения. Хорошо работает для постов и личных сообщений.
Два уровня решений
Каждая проверка возвращает одно из трех решений: Allow, Moderate или Deny.Allow– все чисто, пропускаем.Moderate– подозрительно, но не критично. При регистрации – принудительная активация по email (даже если в настройках отключена). При отправке поста – запись в лог для ручной проверки.Deny– спамер. При регистрации – блокировка. При отправке поста – ошибка. При отправке ЛС – блокировка.
Allow, а другой Deny – финальное решение будет Deny. Всегда побеждает самый строгий вердикт.Точки интеграции
Система проверяет четыре действия:- Регистрация. Проверяется IP, email и username нового пользователя через
UserChecker. Если решениеDeny– регистрация отклоняется. ЕслиModerate– регистрация проходит, но активация по email становится обязательной, независимо от настроек трекера. - Создание поста. Проверяется текст сообщения через
ContentChecker. ЕслиDeny– пост не публикуется, пользователь видит ошибку. ЕслиModerate– пост публикуется, но записывается в спам-лог. - Быстрый ответ. Та же логика, что и для обычных постов.
- Личные сообщения. Если
Deny– сообщение блокируется.
Что с администраторами
По умолчанию проверки выполняются даже для администраторов. Это сделано намеренно – если аккаунт администратора скомпрометирован, система все равно поймает подозрительную активность. Но если это мешает – можно отключить.Спам-лог
В административную панель добавлена новая страница «Спам лог» в разделе «Пользователи». Там видно:- Все проверки с результатами (разрешено / на модерации / заблокировано)
- IP-адрес, email, имя пользователя
- Какой провайдер вынес решение и почему
- Ссылки на профили пользователей (с цветами рангов) и посты
- Подробности в формате JSON для каждой записи (раскрываются по клику)
- Фильтрация по решению, типу проверки, провайдеру и IP-адресу
- Пагинация и сводная статистика
Минимальная настройка
Если не хочется разбираться во всех провайдерах – можно начать с минимума. Включить StopForumSpam (бесплатный, без API-ключа) и SpamPhrases:
PHP:
// config/spam.php
return [
'check_admins' => true,
'providers' => [
'stop_forum_spam' => [
'enabled' => true,
'moderate_threshold' => 50,
'deny_threshold' => 90,
],
'spam_phrases' => [
'enabled' => true,
'phrases' => [
'casino', 'viagra', 'crypto airdrop',
],
],
// Остальные провайдеры – по умолчанию отключены
],
];
Что это дает
- Автоматическая защита. Спамеры отсекаются до того, как нанесут вред – на этапе регистрации и отправки сообщений
- Гибкость. Шесть провайдеров, два уровня решений, четыре точки проверки. Включаете только то, что нужно
- Прозрачность. Спам-лог показывает кто, когда, откуда и почему был заблокирован
- Расширяемость. Добавить новый провайдер – один класс и пара строк конфига
- Надежность. Полное покрытие тестами, кеширование внешних запросов, graceful degradation при недоступности провайдеров