Hoppa till huvudinnehåll

Spam Blocker

Spam Blocker är en centraliserad tjänst för spamdetektering som utvärderar inkommande publikationer och tilldelar dem riskpoäng. Den består av två paket:

  • @bitsocial/spam-blocker-server -- HTTP-servern som tillhandahåller API:erna för utvärdering och utmaningar.
  • @bitsocial/spam-blocker-challenge -- ett lättviktigt klientpaket som communities integrerar för att skicka publikationer till utvärdering.

Källkod: github.com/bitsocialnet/spam-blocker

Så beräknas riskpoängen

Varje publikation som skickas till slutpunkten /evaluate får en numerisk riskpoäng. Poängen är en viktad kombination av flera signaler:

SignalBeskrivning
KontoålderNyare konton får högre riskpoäng.
KarmaUpparbetad karma i communityn sänker risken.
Författarens rykteRyktesdata som samlas in av bakgrundsindexeraren för nätverket.
InnehållsanalysHeuristik på textnivå (länktäthet, kända spammönster och så vidare).
PubliceringstaktMånga inlägg i snabb följd från samma författare ökar risken.
IP-analysGeolokalisering på landsnivå och uppslag mot hotdatabaser. Endast landskoder lagras -- råa IP-adresser delas aldrig med communities.

Nivåtrösklar

Riskpoängen mappas till en av fyra konfigurerbara nivåer som avgör vad som händer sedan:

  1. Automatiskt godkännande -- poängen är tillräckligt låg för att publikationen ska godkännas utan någon utmaning.
  2. OAuth räcker -- författaren måste slutföra en OAuth-verifiering för att komma vidare.
  3. OAuth och mer -- enbart OAuth räcker inte; ytterligare verifiering (t.ex. CAPTCHA) krävs.
  4. Automatiskt avslag -- poängen är för hög; publikationen avvisas direkt.

Alla tröskelvärden går att konfigurera per community.

Utmaningsflödet

När en publikation hamnar på en nivå som kräver verifiering startar utmaningsflödet:

  1. Författaren ombeds först att autentisera sig via OAuth (GitHub, Google, Twitter och andra leverantörer som stöds).
  2. Om enbart OAuth inte räcker (nivå 3) visas en CAPTCHA-reserv som drivs av Cloudflare Turnstile.
  3. OAuth-identiteten används enbart för verifiering -- den delas aldrig med communityn eller med andra användare.

API-slutpunkter

POST /evaluate

Skicka in en publikation för riskutvärdering. Returnerar den beräknade riskpoängen och vilken utmaningsnivå som krävs.

POST /challenge/verify

Skicka in resultatet av en genomförd utmaning (OAuth-token, CAPTCHA-lösning eller båda) för verifiering.

GET /iframe/:sessionId

Returnerar en inbäddningsbar HTML-sida som visar rätt utmaningsgränssnitt för den angivna sessionen.

Hastighetsbegränsning

Hastighetsgränserna sätts dynamiskt utifrån författarens ålder och rykte. Nyare författare och författare med lägre rykte möter striktare gränser, medan etablerade författare får mer generösa trösklar. På så sätt stoppas spamvågor utan att betrodda deltagare straffas.

Bakgrundsindexerare för nätverket

Servern kör en bakgrundsindexerare som kontinuerligt genomsöker nätverket för att bygga upp och underhålla ryktesdata om författare. Dessa data matas direkt in i riskpoängsättningen, vilket gör att systemet känner igen återkommande deltagare i god tro över flera communities.

Integritet

Spam Blocker är byggd med integriteten i åtanke:

  • OAuth-identiteter används enbart för att verifiera utmaningar och röjs aldrig för communities.
  • IP-adresser översätts enbart till landskoder; råa IP-adresser lagras eller delas inte.

Databas

Servern använder SQLite (via better-sqlite3) för lokal lagring av ryktesdata, sessionstillstånd och konfiguration.