Stian Andreassen

misantropisk nektar

Stian Andreassen header image 2

Spamfilter for kommentarene

May 13th, 2007 · 10 Comments

Kommentarspam er noe dritt, det vet alle som har hatt blogg en stund, og som har opplevd å få kommentarfeltet oversvømt av alt mulig dill. Da må det spamfilter til. Men mange av disse spamfiltrene virker uhorvelig avanserte, synes jeg, med svartelisting og hvitlisting, og manuell moderering, og jeg vet ikke hva. Selv svartelister jeg ingen IP-adresser eller domener, og har heller ingen hvitliste over e-postadresser som skal slippe gjennom ufiltrert. Jeg har riktignok tatt gjort noen, bl.a. har jeg gitt input-feltene i kommentarskjemaet misvisende navn (f.eks. heter e-postfeltet foobar og selve kommentarfeltet theblob), og det er mulig dette forvirrer noen av spambotene. Jeg har også et hjemmesnekret spamfilter, med noen få enkle regler, som har vist seg å være svært effektivt. I skrivende stund har det stoppet over 4500 spammeldinger, i løpet av de siste tre månedene. Det er mulig jeg ikke er spesielt hardt angrepet, siden jeg «kun» får 1500 spammeldinger per måned, men det er nå likevel nok til at jeg må gå til motangrep.

Til dette motangrepet har jeg som nevnt snekret et lite spamfilter, og jeg tenkte det kunne være nyttig å dele mitt filter og mine erfaringer med andre. Jeg har kun fire regler i mitt spamfilter, og de stopper effektivt 99 % av all kommentarspam, og har foreløpig ingen falske positive (dvs. den har aldri merket kommentarer som spam, som ikke var det). Om det er så effektivt fordi jeg er lett angrepet, eller om jeg bare har klart å finne en formel som knuster 99 % av spammen, tør jeg ikke å si. Men selv er jeg jo såre fornøyd over at så lite spam kommer gjennom.

Jeg skal gå gjennom reglene i spamfilteret én for én.

Regel nr. 1

Kommentarer kommer fra brukerne, og brukerne av denne siden er alle mennesker. Siden de er mennekser bruker de også kommentarskjemaet som finnes under den enkelte post. Fra dette skjemaet sendes en skjult verdi, som er ID-en til den respektive bloggposten i databasen. Den første regelen i spamfilteret skjekker om denne verdien er sendt – dvs. at verdien ikke er tom eller 0 – og merker alle meldinger som mangler denne som spam.

Regel nr. 2

De fleste spammerne ønsker å legge ved URL-er (opptil flere) i meldingene sine. Men det hender brukerne også ønsker å legge ved URL-er, så jeg vil ikke forby det. Heller legger jeg ingen grense for hvor mange URL-er en kommentar kan innhold. Det jeg derimot ikke tillater i kommentarfeltet, er bruk av BBCode, noe som er svært utbredt i mange bloggesystemer, bl.a. WordPress. Og siden er det er utbredt, bruker spammerne det. Den andre regelen i spamfilteret sjekker om kommentaren innholder [url eller [/url] – og merker den som spam hvis den gjør det.

Regel nr. 3

I spamfiltrering er det veldig vanlig å legge inn en sortliste over «fyord». Min tredje regel er nettopp dét, men listen over fyord er ikke lang. Siden jeg skriver på norsk, er kommentarene jeg får også skrevet på norsk – mens spammerne gjerne skriver på engelsk.Fyord-listen innholder foreløpig kun tre uttrykk som ikke er lov å bruke: nice site, cool site og good site. Den tredje regelen i spamfilteret sjekker om kommentaren innholder fyord, og merker den som spam om den gjør det.

Regel nr. 4

Denne regelen er den enkleste, men også den mest obligatoriske. Den fjerde regelen sjekker om tekststrengen som er oppgitt i feltet for e-postadresse er en gyldig e-postadresse, som innholder både bokstaver, alfrakrøll og punktum – hvis ikke blir kommentaren merket som spam.

Så enkelt er mitt filter. Men som de sier hos REMA 1000; «Det enkle er ofte det beste.» Det funker iallefall veldig fint hos meg.

Tags: Internett og Utvikling

10 responses so far ↓

  • 1 Kent Vegard // May 13, 2007 at 14:43

    En av de løsningene jeg også har sett er å f.eks. skriver inn dagens dato, eller noe lignende, i et felt. Dette eliminerer en god del spam.
    Selv stoler jeg mest på whitelist/blacklist samt moderasjon mot spam. Jeg kjører også en sjekk av antall URL i en kommentar, dersom for mange av en ikke godkjent bruker blir kommentaren liggende til moderering.

  • 2 Stian Andreassen // May 13, 2007 at 14:46

    Jeg vil helst slippe moderering, og så langt har det ikke vært nødvendig. Slik det er nå kjører jeg kun spamfilteret, og sletter falske negative manuelt når de en sjelden gang dukker opp. Felt for å skrive inn noe kjenner jeg til, men også dét vil jeg helst slippe såfremt det er mulig. Hittil har det holdt i massevis med filteret mitt.

  • 3 martin // May 13, 2007 at 16:08

    Jeg brukte haloscan i omtrent 4 år og fikk ikke en eneste spam i den perioden.

  • 4 Stian Andreassen // May 13, 2007 at 16:49

    Just for the record kan jeg jo nevne at jeg ikke buker WordPress eller annen ferdig hyllevare, men et helt egetprodusert bloggesystem.

  • 5 Elf // May 13, 2007 at 18:41

    Jeg har en fyordliste, har navngitt feltene mine med heller barnslige og ulogiske navn og sjekker om det er gyldig epostadresse i kommentaren som kommer inn.

    På tross av dette fikk jeg fortsatt spam.

    Det som virkelig gjorde susen hos meg var å legge til et felt uten verdi, som ikke er skjlut vha hidden, men derimot er det skjult ved å sette det til hvitt vha css. Hvis dette feltet har verdi stopper jeg kommentaren. Etter dette har jeg ikke fått noe som helst spam.

  • 6 Stian Andreassen // May 13, 2007 at 18:49

    Elf: Genialt utklekket. Skal implementere den som en ekstra sikkerhet. Takk for tips!

  • 7 Lasse G. Dahl // May 14, 2007 at 12:07

    Løsningen din minner litt om min, og i tillegg har den et poeng jeg skal stjele :-).

    I tillegg modererer jeg meldinger med flere spamkarakterisktikker, slik at det blir litt mer manuell jobb hos meg. Men det er ikke så mye!

  • 8 Stian Andreassen // May 14, 2007 at 12:12

    Hvilken poeng skal du «stjele»? Dét er jo interessant for meg å vite. ;-)

  • 9 Nils // Jun 13, 2007 at 21:48

    Takk for tips Stian & Elf, nå har jeg tvunget andars til å implementere en del av disse knepene på siden min.

  • 10 Stian Andreassen // Jun 13, 2007 at 22:19

    Ingen årsak, Nils. Det var poenget med hele posten. ;-)

Leave a Comment