Spam Blocker
Этот пакет изначально был опубликован под областью @plebbit. Он был переименован в @bitsocial/spam-blocker-server и @bitsocial/spam-blocker-challenge. Ссылки на старые имена могут все еще появляться в старой документации или базах кода.
Spam Blocker — это централизованная служба обнаружения спама, которая оценивает входящие публикации и присваивает оценки риска. Состоит из двух пакетов:
@bitsocial/spam-blocker-server– HTTP-сервер, на котором размещены API оценки и проверки.@bitsocial/spam-blocker-challenge— облегченный клиентский пакет, который сообщества интегрируют для отправки публикаций на оценку.
Исходный код: github.com/bitsocialnet/spam-blocker
Как работает оценка рисков
Каждая публикация, отправленная в конечную точку /evaluate, получает числовой показатель риска. Оценка представляет собой взвешенную комбинацию нескольких сигналов:
| Сигнал | Описание |
|---|---|
| Возраст аккаунта | Новые учетные записи получают более высокие оценки риска. |
| Карма | Накопленная общественная карма снижает риск. |
| Репутация автора | Данные о репутации, собранные индексатором фоновой сети. |
| Контент-анализ | Эвристика на уровне текста (плотность ссылок, известные шаблоны спама и т. д.). |
| Скорость | Быстрые последовательные публикации одного и того же автора увеличивают риск. |
| IP-разведка | Геолокация на уровне страны и поиск угроз. Сохраняются только коды стран — необработанные IP-адреса никогда не передаются сообществам. |
Пороги уровня
Оценка риска соответствует одному из четырех настраиваемых уровней, которые определяют, что произойдет дальше:
- Автоматическое принятие – оценка достаточно низкая, чтобы публикация была одобрена без каких-либо проблем.
- OAuth-достаточно – автор должен пройти проверку OAuth, чтобы продолжить.
- OAuth плюс еще – одного OAuth недостаточно; требуется дополнительная проверка (например, CAPTCHA).
- Автоматический отказ – слишком высокая оценка; публикация категорически отвергается.
Все пороговые значения настраиваются для каждого сообщества.
Последовательность задач
Когда публикация попадает на уровень, требующий проверки, начинается поток проверки:
- Автору сначала предлагается пройти аутентификацию через OAuth (GitHub, Google, Twitter и другие поддерживаемые поставщики).
- Если одного OAuth недостаточно (уровень 3), предоставляется запасной вариант CAPTCHA на базе Cloudflare Turnstile.
- Идентификатор OAuth используется исключительно для проверки — он никогда не передается сообществу или другим пользователям.
Конечные точки API
POST /evaluate
Отправьте публикацию для оценки рисков. Возвращает вычисленную оценку риска и требуемый уровень сложности.
POST /challenge/verify
Отправьте результат выполненного запроса (токен OAuth, решение CAPTCHA или и то, и другое) для проверки.
GET /iframe/:sessionId
Возвращает встраиваемую HTML-страницу, которая отображает соответствующий пользовательский интерфейс задачи для данного сеанса.
Ограничение скорости
Ограничения скорости применяются динамически в зависимости от возраста и репутации автора. Новые авторы или авторы с более низкой репутацией сталкиваются с более строгими ограничениями, в то время как авторитетные авторы пользуются более щедрыми порогами. Это предотвращает потоки спама, не наказывая при этом доверенных участников.
Фоновый сетевой индексатор
На сервере запущен фоновый индексатор, который постоянно сканирует сеть для создания и поддержания данных о репутации автора. Эти данные поступают непосредственно в систему оценки рисков, что позволяет системе распознавать повторных добросовестных участников в разных сообществах.
Конфиденциальность
Блокировщик спама разработан с учетом конфиденциальности:
- Идентификаторы OAuth используются только для проверки запроса и никогда не разглашаются сообществам.
- IP-адреса разрешаются только с кодами стран; необработанные IP-адреса не сохраняются и не передаются.
База данных
Сервер использует SQLite (через better-sqlite3) для локального сохранения данных о репутации, состояния сеанса и конфигурации.