Hvad kan du gøre ved Blog spam?
Sådan håndtere jeg blog spam på Beamtic!
Af. Jacob
Edited: 2023-04-29 08:58
På nogle dage modtager selv godt over 200 spam beskeder på Beamtic – men jeg ser dem faktisk aldrig. Næsten alle spambeskeder bliver blokeret af et spamfilter, som jeg selv har lavet.
Det sjove ved spam beskederne er nemlig, at de stort set allesammen deler nogle fælles karaktertræk, og blokere du for dem, så blokere du dem alle. Det vil sige, at du kan blokere for spam beskeder på en relativt enkel måde, og det er helt uden brugen af en CAPTCHA anordning.
Det tager dog lidt tid at vedligeholde et godt filter, men jeg synes egentlig det er meget sjovt at finde løsninger, og så kræver det jo en manuel gennemgang og analyse af de første beskeder, og det kan ligefrem være sjovt at læse den ekstremt karikerede måde, spammerne skriver på. Når du først har bestemt, hvad de individuelle beskeder har til fælles med andet spam, så kommer du ikke til at læse eller se dem igen.
Min tilgang til blog spam
Når man laver et indholdsfilter, så vil man ofte starte med at oprette nogle lister med ord eller sætninger (På programmerings sprog "strenge"), som ikke må forekomme i en given besked. Jeg vidste fra starten, at det ikke var helt nok, fordi almindelige brugere også kunne finde på at bruge samme ord og sætninger (strenge). Dvs. Jeg måtte tildele hver streng en form for spam-point, og kun blokere beskeden, hvis en regl blev brudt sammen med andre regler.
Ofte vil du kunne bandlyse en streng direkte, fordi den er så unik og karikeret, at du kan konkludere, at den er "unik" til en bestemt form for spam. Det meste blog spam jeg modtager, falder stadigvæk under den form for "unikke" mønstre, og det er endda til trods for fremgang inden for kunstig intelligens, som eksempelvis OpenAI's ChatGPT.
Det meste spam er på Engelsk, og hvis du kun tillader eksempelvis Dansk, så kan du bare lave et filter som blokere for beskeder, som ikke er på Dansk.
Det er en rigtig god start med de her filtre, problemet med dem er dog, at de bliver for store med tiden. De fleste udviklere vil nok lægge ud med, at scanne selve indholdet i beskederne for strenge som ikke må være der. Det bliver dog for langsom en process når dine lister vokser sig store, og derfor må vi finde en bedre løsning.
En relativ god og effektiv løsning er, at bryde indholdet i en besked op i flere dele, og så sammenligne hver enkelt del med indholdet i spam listerne. På den måde undgår man også, at tjekke efter en masse ting i indholdet, som man kan se, ikke er til stede.
Hvordan genkender et menneske spam?
Et menneske vil læse beskeden, og nærmest øjeblikkelig være i stand til at vurdere, om beskeden er spam. Det sker antageligvis delvist fordi vi har en hukommelse, og delvist fordi vi er kreative, og vi kan genkende bøjninger og variationer af ord og sætninger.
Den vigtigste detalje som du er interesseret i, er dog, hukommelse. Dvs. Evnen til at genkende mønstre, som vi tidligere er stødt på. Alene ved at lave en applikation, som kan gøre det, kan vi stoppe både gradbøjninger og variationer af spam, helt uden brug af kunstig intelligens. Det kræver blot, at vi gemmer det i en database over "shit".
Som mennesker må vi altså se på indholdet i en besked først, som vi så sammenligner, med vores eksisterende viden om spam beskeder. Vi vil normalt ikke sidde og scanne indholdet minutiøst efter lange lister af ord og sætninger.
PHP har en funktion, som vi kan bruge til formålet, nemlig preg_match_all. Jeg har tidligere brugt den til at finde alle nøgleord og nøglesætninger i indholdet på artikler, for at lave et slags ranking system. Det er en virkelig kraftfuld funktion!
Ved hjælp af denne funktion, kan du outputte et simpelt array med indholdet fra en besked, som så nemt og hurtigt kan sammenlignes med indholdet i en "spam database". Hvis du har opsat indexes på databasen korrekt, så vil det være så hurtigt, at analysen vil tage millisekunder at gennemføre. Omvendt kan det tage op imod et sekund eller flere, hvis du skal løbe igennem alle dine anti-spam lister, og tjekke hver enkelt lille regl imod beskederne. Normalt vil man kunne løbe igennem en liste på hundredetisindevis af linjer på under et sekund, så det er ikke fordi, det er det store. Det som tager mest tid, er, hvis du bruger langsomme funktioner inde i dit loop.
Advarsel om: DoS og Anti-spam filtre
Hvis du modtager meget spam, og dit filter ikke er optimeret, så risikere du, at skabe en slags DoS situation for dig selv.
Som nævnt tidligere vil det være meget langsomt at løbe igennem lange lister med spam, for at tjekke om en given besked indeholder noget af det i forvejen kendte. Det vil tage en del CPU. Får du mange spam beskeder, så vil din server bruge alt dens energi på at analysere spam beskeder.
Det bliver selvfølgelig minimeret, hvis du bandlyser brugerne midlertidigt, når de har postet indhold, som bliver blokeret. Men det vil ikke være helt nok, fordi spammerne oftest bare vil omgå de midlertidige blokeringer.
Slutteligt
Nu har jeg gennemgået en yderst effektiv teknik til at bekæmpe blog spam, og håber det kan være til inspiration for andre hjemmesideejere.
Selvfølgelig er der også eksisterende løsninger i form af plugins til forskellige blog platforme, men jeg ønsker ikke nævne dem her, da de ofte vil være betalingsplugins, og så er det jo relativt nemt bare at lave sit eget.
Anti-spam funktionalitet til en simpel blog, burde også være indbygget i platformen, og ikke noget man skal installere eksterne 3-parts plugins til. Det er jo ikke fordi, at der er noget nyt eller sofistikeret i spam.
Fortæl os hvad du tænker: