– fordi tiden kræver et MODSPIL

25. Nov 2008

Nyt våben i krigen mod spam

 
Atilla lægger råd op om invasionen af cyberspace

Selv om Wordpress' antispamsystem Akismet fanger det meste kommentarspam, slipper der stadig noget igennem.

Jeg har derfor besluttet, at for at skrive kommentarer her på Modspil.dk (ikke Modpress, som har sit eget system) skal man fremover skrive under på, at man er et menneske.

Det gør man ved at sætte kryds i den dertil indrettede checkbox i kommentarfeltet.

Det er den hidtil simpleste CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart)-algoritme, jeg har set – metoden er valgt dels for at se, hvor langt man kan komme for så lidt, dels for at undgå at bebyrde læserne med ulæselige billeder og fornærmeligt nemme regnestykker.

Sætte kryds i et felt, det er da til at overskue.

En medvirkende årsag til at vælge netop denne metode er naturligvis også, at noget mere kompliceret ville have været vanskeligere at implementere.

I mit Blosxom-system skulle der nemlig ikke så meget til for at få krydset på plads.

Kommentar-plugin'en writeback indeholdt allerede dette check:
 foreach (@required_fields) {
          my $p = param($_);
          unless (defined $p && $p =~ /\S/) {
            $writeback_response =
                "You forgot to include your $_.  Go back and fill it in.";
            return 1;
          }
... der sikrer, at folk husker at skrive deres navn og ikke sender en tom kommentar.

For at implementere den box, hvor man sætter sit kryds, indførte jeg et nyt felt i kommentarfeltets HTML, kaldet "simple_turing" (efter den britiske matematiker Alan Turing, der foreslog en metode til at kende forskel på menneskers og computeres udsagn).

Nu kunne jeg sådan set bare have optaget det nye felt på listen over "required fields", men jeg ville gerne kunne håndtere det lidt anderledes, så jeg tilføjede i stedet dette check lige under det første:
    unless (defined param('simple_turing') )
    {
            $writeback_response =
               "Please check antispam box to show you're human!"
               "Use your browser's 'Back' button to get your comment back.";
            notify("spambot");
            return 1;
    }
 
... og det kunne jo dårligt være nemmere.

Denne kontrol ligger altså efter checket for obligatoriske felter i kommentaren (navn, adresse osv.), men før vi slår op, om Akismet mener, det er spam.

Resultatet er, at den nye metode standser 98% af al spam, før vi når til at slå det op i Akismet.

Absolut intet er sluppet igennem og kommet op på siden, efter at det nye system er indført. Og hvis spamrobotterne lurer det nye system og begynder at sætte krydset, og der derfor slipper noget igennem af og til, når Akismet har en dårlig dag?

Nåja, så må vi til det med regnestykkerne. Men indtil videre lader det til, at et simpelt kryds kan klare ærterne.

Kommentarer: