Kan dette være den ultimate måten å stoppe spamkommentarer på?

Neste generasjon av EBA-News, publiseringssytemet mitt, er under utvikling for tiden, og jeg planlegger en god del nye funksjoner for å sette en stopper for spamkommentarer – en gang for alle. I den forbindelse noterer jeg meg en del tanker omkring hvordan spammerne opererer, for så å programmere motløsninger, og jeg mener å ha kommet opp med en interessant løsning som kan stoppe det meste av spammen fremover.

I dette eksempelet forutsettes det at systemet har mulighet for å deaktivere kommentarer etter en bestemt periode. Av erfaring vet jeg at spammerne søker rundt på nettet etter sårbare blogger med mulighet for kommentarer. Hvorvidt dette gjøres manuelt eller automatisk første gangen er jeg ikke sikker på, men jeg notert meg at prøves ut veldig mange ulike kombinasjoner på de første besøkene. En slags prøv-og-feil-metode, altså.

Loggene mine forteller meg også at så fort den aktuelle bloggen er blitt lagt til i listen over sårbare nettsteder, sender robotene en POST-forespørsel uten engang å besøke nettsiden i forkant. Dette kan lett gjøres med f.eks. PHP. Bare dette gir oss et mot-tiltak om vi ser på funksjoner vi allerede har.

En svakhet med mange nyhetspubliseringssystemer, også EBA-News, er at funksjonen som teller antall visninger hver enkelt artikkel har hatt baserer seg på sidevisninger, og ikke unike besøkende. Å lagre en informasjonskapsel hos brukeren er selvfølgelig en halvveis løsning på dette, men den vil sansynligvis bli slettet etter en viss periode, om i det hele tatt akseptert. En bedre løsning vil med andre ord være å lagre IP-adressen til den besøkende og koble den opp mot identifikasjonsnummeret på de aktuelle artiklene. På den måten er vi ikke avhengige av at brukeren godtar og tar vare på informasjonskapselen, og vi har kontroll på systemet uten å være avhengige av eksterne innstillinger.

En negativ side ved dette er selvfølgelig at det kan ta opp en god del plass etter hvert. Om man f.eks. har et arkiv på 500 artikler som alle er blitt besøkt 300 ganger hver, vil databasen allerede være på 150 000 rader. Men frykt ikke – det er ikke så mye som det høres ut som og hver rad lagrer bare noen tall som ikke tar svære plassen.

Vårt mottiltak går ut på å koble disse funksjonene sammen, noe som er like enkelt som det er genialt. Både vanlige brukere som poster kommentarer og spammerne som lar hele prosessen gå automatisk, sender kommentaren til en spesifikk adresse, i mitt tilfelle http://skriblerier.net/blogg/x/comment/, hvor x representerer artikkel-ID-en. Vanlige brukere sender data til denne adressen gjennom et <form>-skjema på siden min, mens spammerne har programmerte løsninger som sender informasjon rett til disse adressene gjennom f.eks. et PHP-script.

Det vi kan gjøre er å sjekke om IP-adressen som forsøker å poste kommentaren er lagret i databasen med det tilhørende artikkelnummeret. Om f.eks. 83.108.199.154, en norsk spammer, forsøker å legge til en spamkommentar på siden min, vil dette høyst sannsynlig gjøres gjennom et script, og siden han/hun/det neppe gidder å ta seg bryet med å besøkende nettsiden min hver bidige gang, vil ikke IP-adressen være lagret i databasen og forsøket stoppes.

Når vi allerede har funksjonalitet for å stenge for kommentarer etter en viss periode, kan dette kobles opp mot lagringen av unike besøkende og hvis vi ønsker, kan vi slette alle oppføringer som er eldre enn x dager som da er artikler hvis kommentarmulighet er stengt.

Oppsummering

1. Systemet trenger støtte for å stenge kommentarer etter x dager
2. Opprett en ny tabell i databasen som har to kolonner: article_id og ip
3. For hver artikkelvisning, sjekk om IP-adressen allerede er lagret i tabellen sammen med artikkel-ID-en. Hvis nei, lagre.
4. Før kommentaren blir lagret, sjekk om IP-adressen finnes i tabellen, hvis nei, blokker
5. Sett opp en cronjob som sletter alle oppføringer i tabellen for artikkelreferanser som er eldre enn x dager (samme som pkt. 1)

Merk også …

Dette alene vil sjeldent være tilstrekkelig tiltak for å sette en stopper for spammerne, hovedsaklig på grunn av at det finnes folk som får tildelt en ny IP-adresse på hver sidevisning, mens andre har samme IP-adresse som mange andre kunder. Om man derimot kombinerer dette med f.eks. spesifikke filtere som sjekker typiske spamord, vil man få et ganske så solid bloggsystem.

Tilbakemeldinger mottas med stor interesse!

RSS Kommentarer (2)

# – av bza – 22. desember 2006

Du kan gjøre det meste av dette i en fei! Når noen laster artikkelen sjekkes datoen, og om kommentarene er åpne. Dersom kommentarene er åpne og datoen er x antall dager bak i tid oppdateres tabellen og kommentarene stenges, samt at alle rader med den article_id'en i ip-tabellen slettes. Dersom datoen er innenfor x antall dager oppdateres tabellen med brukerens IP og article_id, såfremt denne ikke eksisterer fra før.

# – av Espen Andersson – 22. desember 2006

Du tenker som en erstatning for cronjobben? Det er selvfølgelig en mulighet.



Legg til kommentar


— Ingen HTML
— [em], [b], [u]
— [quote], [quote=navn]
— [url], [url=]

 
 
Grunnet omfattende spamangep må førstegangskommentatorer godkjennes manuelt. Vennligst ikke lagre samme kommentaren flere ganger om den ikke vises umiddelbart.