スパムブロッカー
Spam Blocker は、受信したパブリケーションを評価し、リスク スコアを割り当てる一元的なスパム検出サービスです。これは 2 つのパッケージで構成されています。
@bitsocial/spam-blocker-server-- 評価 API とチャレンジ API をホストする HTTP サーバー。@bitsocial/spam-blocker-challenge-- コミュニティが評価用の出版物を送信するために統合する軽量クライアント パッケージ。
ソース コード: github.com/bitsocialnet/spam-blocker
リスクスコアリングの仕組み
/evaluate エンドポイントに送信されたすべてのパブリケーションは、数値リスク スコアを受け取ります。スコアは、いくつかの信号を重み付けして組み合わせたものです。
| 信号 | 説明 |
|---|---|
| アカウントの年齢 | 新しいアカウントほどリスク スコアが高くなります。 |
| カルマ | コミュニティのカルマが蓄積されるとリスクが軽減されます。 |
| 著者の評判 | バックグラウンド ネットワーク インデクサーによって収集された評判データ。 |
| コンテンツ分析 | テキストレベルのヒューリスティック (リンク密度、既知のスパム パターンなど)。 |
| 速度 | 同じ投稿者からの急速な連続投稿はリスクを高めます。 |
| IPインテリジェンス | 国レベルの地理位置情報と脅威フィードの検索。国コードのみが保存されます。生の IP アドレスがコミュニティと共有されることはありません。 |
階層のしきい値
リスク スコアは、次に何が起こるかを決定する 4 つの構成可能な層のいずれかにマップされます。
- 自動承認 -- スコアが十分に低いため、パブリケーションは問題なく承認されます。
- OAuth で十分 -- 続行するには、作成者は OAuth 検証を完了する必要があります。
- OAuth プラスモア -- OAuth だけでは十分ではありません。追加の検証 (CAPTCHA など) が必要です。
- 自動拒否 -- スコアが高すぎます。出版は完全に拒否されます。
すべてのしきい値はコミュニティごとに設定可能です。
チャレンジの流れ
パブリケーションが検証を必要とする層に分類されると、チャレンジ フローが開始されます。
- 作成者は、最初に OAuth (GitHub、Google、Twitter、およびその他のサポートされているプロバイダー) を介して認証するように求められます。
- OAuth だけでは不十分な場合 (層 3)、Cloudflare Turnstile を利用した CAPTCHA フォールバック が表示されます。
- OAuth ID は検証のみに使用され、コミュニティや他のユーザーと決して共有されることはありません。
APIエンドポイント
POST /evaluate
リスク評価のために出版物を提出します。計算されたリスク スコアと必要なチャレンジ層を返します。
POST /challenge/verify
完了したチャレンジの結果 (OAuth トークン、CAPTCHA ソリューション、またはその両方) を検証のために送信します。
GET /iframe/:sessionId
指定されたセッションに適切なチャレンジ UI をレンダリングする埋め込み可能な HTML ページを返します。
レート制限
レート制限は、著者の年齢と評判に基づいて動的に適用されます。新人または評判の低い著者にはより厳しい制限が課せられますが、確立された著者にはより寛大な制限が適用されます。これにより、信頼できる参加者にペナルティを与えることなく、スパムの洪水を防ぐことができます。
バックグラウンドネットワークインデクサ
サーバーは、ネットワークを継続的にクロールして著者の評判データを構築および維持するバックグラウンド インデクサーを実行します。このデータはリスク スコアリング パイプラインに直接入力され、システムがコミュニティ全体で繰り返しの善意の参加者を認識できるようになります。
プライバシー
スパム ブロッカーはプライバシーを考慮して設計されています。
- OAuth ID はチャレンジの検証にのみ使用され、コミュニティに決して開示されることはありません。
- IP アドレスは 国コードのみに解決されます。生の IP は保存または共有されません。
データベース
サーバーは、レピュテーション データ、セッション状態、および構成のローカル永続化に SQLite (better-sqlite3 経由) を使用します。