Перейти к основному содержанию

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-адреса никогда не передаются сообществам.

Пороги уровня

Оценка риска соответствует одному из четырех настраиваемых уровней, которые определяют, что произойдет дальше:

  1. Автоматическое принятие – оценка достаточно низкая, чтобы публикация была одобрена без каких-либо проблем.
  2. OAuth-достаточно – автор должен пройти проверку OAuth, чтобы продолжить.
  3. OAuth плюс еще – одного OAuth недостаточно; требуется дополнительная проверка (например, CAPTCHA).
  4. Автоматический отказ – слишком высокая оценка; публикация категорически отвергается.

Все пороговые значения настраиваются для каждого сообщества.

Последовательность задач

Когда публикация попадает на уровень, требующий проверки, начинается поток проверки:

  1. Автору сначала предлагается пройти аутентификацию через OAuth (GitHub, Google, Twitter и другие поддерживаемые поставщики).
  2. Если одного OAuth недостаточно (уровень 3), предоставляется запасной вариант CAPTCHA на базе Cloudflare Turnstile.
  3. Идентификатор OAuth используется исключительно для проверки — он никогда не передается сообществу или другим пользователям.

Конечные точки API

POST /evaluate

Отправьте публикацию для оценки рисков. Возвращает вычисленную оценку риска и требуемый уровень сложности.

POST /challenge/verify

Отправьте результат выполненного запроса (токен OAuth, решение CAPTCHA или и то, и другое) для проверки.

GET /iframe/:sessionId

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

Ограничение скорости

Ограничения скорости применяются динамически в зависимости от возраста и репутации автора. Новые авторы или авторы с более низкой репутацией сталкиваются с более строгими ограничениями, в то время как авторитетные авторы пользуются более щедрыми порогами. Это предотвращает потоки спама, не наказывая при этом доверенных участников.

Фоновый сетевой индексатор

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

Конфиденциальность

Блокировщик спама разработан с учетом конфиденциальности:

  • Идентификаторы OAuth используются только для проверки запроса и никогда не разглашаются сообществам.
  • IP-адреса разрешаются только с кодами стран; необработанные IP-адреса не сохраняются и не передаются.

База данных

Сервер использует SQLite (через better-sqlite3) для локального сохранения данных о репутации, состояния сеанса и конфигурации.