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-sufficient -- автор повинен пройти перевірку OAuth, щоб продовжити.
- OAuth-plus-more -- одного лише 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) для локального збереження даних репутації, стану сеансу та конфігурації.