LIM-Web: Utviklerblogg

Spamkontroll på Samfundet.no

Skrevet av Kjetil Hope Tufteland, 03. mars kl. 19:09 (8)

Gjennom mange år har Samfundet.no blitt plaget av spam-roboter som har lagt inn innlegg i forumet av forskjellig slag. I desember (2007) lanserte vi det nye forumet vårt, samfundet.no/forum, og spamproblemet var én av mange grunner for at det gamle systemet ble forkastet.

Et av vanligste kjennetegnene på spam-roboter er det faktum at de prøver å fylle ut alle tekstfeltene de kjenner til. Når vi skal implementere dette mot vårt rammeverk, Zend Framework, har vi opprettet en modul som inneholder veldig generell modeller og kontrollere kalt Site. Vi laget da en modellklasse kalt SpamBlocker og i konstruktørmetoden, __construct(), har listet opp vanlige tekstfelt som håper spamrobotene vil bruke.

/**
 * Initialize common variables.
 */
public function __construct() {
    $this->_bannedInputs = array('url',
                                 'link',
                                 'site',
                                 'first_name');
}

Videre består modellen av to metoder; getBannedInput() og isSpam(). Den første metoden returnerer tabellen _bannedInputs definert i konstruktøren, den andre metoden returner en boolsk verdi avhengig om tekstfeltene er fylt ut eller ikke. Metoden isSpam() er implementert slik:

/**
 * Check for spam
 *
 * Determine whether the spambot has filled in the fields
 * with the keys in the bannedInputs array.
 *
 * @param array Contains key => value pairs
 * @return boolean Whether data is spam or not
 */
public function isSpam($data) {
    $isSpam = false;
    $bannedInputs = $this->getBannedInputs();

    foreach ($data as $input => $inputValue) {
        foreach ($bannedInputs as $key => $bannedInput) {
            if ($bannedInput == $input && '' != $inputValue) {
                $isSpam = true;
            }
        }
    }

    return $isSpam;
}

Forumet har vært i drift i nesten 3 måneder uten et eneste innlegg fra spam-roboter. Om dette skyldes vårt nye system eller om spam-robotene har gått lei oss kan jeg verken bekrefte eller avbekrefte. Når det gjelder svakheter slik jeg ser er at brukere som har skrudd av CSSen ser disse tekstfeltene og kan fylle de ut. Dette har vi prøvd å utgå ved å legge ved tekst som sier at brukeren ikke må skrive i disse feltene. Den andre svakheten er de tekstfeltene vi forbyr er ubrukelig for alle ønsker å bruke funksjonaliteten.

Samfundets webdesigner Olav Bjørkøy har skrevet et mer utfyllende og generelt blogginnlegg om beskyttelse mot kommenteringsspamsin blogg.


Svar på dette innlegget

Kristian Fredrik Klette skrev for 2 år siden :

De aller fleste spam-boter har ikke js av diverse grunner, så vi løser det slik:

<body onload="fisk=document.getElementById('havting'); if (fisk) { fisk.value = 'fisk';     document.getElementById('fisk').style.display = 'none'; }">

så legger man inn

<input type="text" name="havting" /> 

på sider med forms, så sjekker man om havting = fisk i endrings-koden :)

Simple yet effective.

(Her fant vi en css-bug også ja :) )

Kristian Fredrik Klette skrev for 2 år siden :

Legg til en <p id="fisk"> Skriv inn "fisk" her</p> så har man pen degrading også :)

Erik Smistad skrev for 2 år siden :

Jeg antar det er denne saken dere bruker på wikien deres. Noe jeg har lagt merke til med denne er at det "skriv inn fisk her" feltet blir fjernet i Opera og Firefox, men ikke i IE.

Hadde vært fint om dere kunne ha fiksa det. Tror enkelte er litt leie av å skrive fisk hele tiden :P

Kristian Fredrik Klette skrev for 2 år siden :

De får vente på IE8 og håpe at det hjelper :) Evt bare få inn en saklig nettleser, men skal ikke begi meg ut på den diskusjonen.

Kim Joar Bekkelund skrev for 2 år siden :

Man trenger ikke vente så lenge, IE8 beta ble sluppet rimelig nøyaktig nettopp.

Runa Sandvik skrev for 2 år siden :

Jeg synes det mangler "forrige innlegg"- og "nyere innlegg"-knapper her. Og det hadde vært fint om jeg kunne ha en link til min blogg på profilen min - selv om jeg ikke blogger på nye.samfundet.no/blogg :)

Kristian Fredrik Klette skrev for 2 år siden :

Ser ut til at dere har litt mer jobb å gjøre ref siste postene på forumet :)

Stig Hornang skrev for 2 år siden :

En ting som er viktig ang. dette er at når man trykker "forhåndsvisning" så må de fake dataene beholdes i feltene som ikke synes. Ellers er det bare for spam-boten å bevisst eller ubevisst (flaks) trykke på "forhåndsvis"-submit-knappen først så forsvinner de fake dataene og så trykke "publiser". Dette ble fikset i ettertid på forumet og etter det har det ikke vært en eneste spam-bot på fære.

Om denne bloggen
Om webseksjonens tekniske løsninger som ligger bak samfundet.no som kan være av interesse for dem som er interessert i webdesign og webutvikling.

Trykk på for å rapportere innlegg.


Skriv svar på dette innlegget


OBS: De følgende feltene er her for å stoppe spam. Ikke fyll inn noe i disse. :)



Hvis du har medlemskort på Samfundet kan du logge inn.


eller

Formatering
Kode Resultat
_Kursiv tekst_ Kursiv tekst
**Fet skrift** Fet skrift
> Sitert tekst Sitert tekst
[Lenke](http://www.samfundet.no) Lenke
[youtube](http://www.youtube.com/watch?v=CjOQ9r35uiU) Viser et youtube filmklipp
* Punkt 1
* Punkt 2
  • Punkt 1
  • Punkt 2
(Dette gjelder kun for innleggsfeltet.)
Formateringskonverter

Pass på at du har lest og at du opprettholder bloggens regler.