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 kommenteringsspam på sin blogg.
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 :) )
Legg til en <p id="fisk"> Skriv inn "fisk" her</p> så har man pen degrading også :)
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
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.
Man trenger ikke vente så lenge, IE8 beta ble sluppet rimelig nøyaktig nettopp.
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 :)
Ser ut til at dere har litt mer jobb å gjøre ref siste postene på forumet :)
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.
Trykk på
for å rapportere innlegg.
| 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 |
|
| (Dette gjelder kun for innleggsfeltet.) | |
| Formateringskonverter | |
Pass på at du har lest og at du opprettholder bloggens regler.