Blokátor spamu
Spam Blocker je centralizovaná služba detekce spamu, která vyhodnocuje příchozí publikace a přiřazuje skóre rizik. Skládá se ze dvou balíčků:
@bitsocial/spam-blocker-server-- HTTP server, který hostí rozhraní API pro hodnocení a výzvy.@bitsocial/spam-blocker-challenge– odlehčený klientský balíček, který komunity integrují a posílají publikace k vyhodnocení.
Zdrojový kód: github.com/bitsocialnet/spam-blocker
Jak funguje hodnocení rizika
Každá publikace odeslaná do koncového bodu /evaluate obdrží číselné skóre rizika. Skóre je vážená kombinace několika signálů:
| Signál | Popis |
|---|---|
| Stáří účtu | Novější účty dostávají vyšší skóre rizika. |
| Karma | Nahromaděná komunitní karma snižuje riziko. |
| Pověst autora | Údaje o pověsti shromážděné indexátorem sítě na pozadí. |
| Obsahová analýza | Heuristika na úrovni textu (hustota odkazů, známé vzorce spamu atd.). |
| Rychlost | Rychle po sobě jdoucí příspěvky od stejného autora zvyšují riziko. |
| IP inteligence | Geolokace na úrovni země a vyhledávání zdrojů hrozeb. Ukládají se pouze kódy zemí – nezpracované IP adresy nejsou nikdy sdíleny s komunitami. |
Hranice úrovně
Skóre rizika se mapuje do jedné ze čtyř konfigurovatelných úrovní, které určují, co se stane dál:
- Automatické přijetí – skóre je dostatečně nízké, aby byla publikace schválena bez jakýchkoliv problémů.
- OAuth-dostatečné – autor musí provést ověření OAuth, aby mohl pokračovat.
- OAuth-plus-more -- Samotné OAuth nestačí; je vyžadováno další ověření (např. CAPTCHA).
- Automatické odmítnutí – skóre je příliš vysoké; zveřejnění je zcela odmítnuto.
Všechny prahové hodnoty jsou konfigurovatelné pro každou komunitu.
Challenge Flow
Když publikace spadá do úrovně, která vyžaduje ověření, začne tok výzvy:
- Autor je nejprve vyzván k ověření prostřednictvím OAuth (GitHub, Google, Twitter a další podporovaní poskytovatelé).
- Pokud samotné OAuth nestačí (úroveň 3), zobrazí se záložní CAPTCHA využívající Cloudflare Turnstile.
- Identita OAuth slouží výhradně k ověření – nikdy není sdílena s komunitou ani jinými uživateli.
Koncové body API
POST /evaluate
Odeslat publikaci k vyhodnocení rizik. Vrátí vypočítané skóre rizika a požadovanou úroveň výzvy.
POST /challenge/verify
Odešlete výsledek dokončené výzvy (token OAuth, řešení CAPTCHA nebo obojí) k ověření.
GET /iframe/:sessionId
Vrátí vložitelnou stránku HTML, která vykreslí příslušné uživatelské rozhraní výzvy pro danou relaci.
Omezení sazby
Limity sazeb jsou aplikovány dynamicky na základě věku a pověsti autora. Novější autoři nebo autoři s nižší reputací čelí přísnějším limitům, zatímco zavedení autoři si užívají štědřejší limity. Tím se zabrání záplavám nevyžádané pošty bez penalizace důvěryhodných účastníků.
Pozadí Network Indexer
Server spouští indexátor na pozadí, který nepřetržitě prochází síť, aby vytvořil a udržoval data o pověsti autora. Tato data se přivádějí přímo do procesu hodnocení rizik, což umožňuje systému rozpoznat opakující se účastníky dobré víry napříč komunitami.
soukromí
Spam Blocker je navržen s ohledem na soukromí:
- Identity OAuth se používají pouze pro ověření výzvy a nejsou nikdy sdělovány komunitám.
- IP adresy jsou přeloženy na pouze kódy zemí; nezpracované IP adresy nejsou uloženy ani sdíleny.
databáze
Server používá SQLite (prostřednictvím better-sqlite3) pro místní zachování dat reputace, stavu relace a konfigurace.