Så fort spammarna ser en möjlighet så tar dom den. I Kundos fall så har striden pågått länge, men eftersom många upplevt att spammängden ökat på sistone så bestämde vi oss för att se om vi kunde göra vår anti-spamlösning ännu effektivare.
Vilken slags spam får vi?
Det första vi tittade på var vilken slags spam vi får, och mönstret är tydligt:
- Automatiserat: De allra flesta inlägg som kommer är nonsensinlägg, som tydligt inte är skrivna för hand.
- Fullt av länkar: Anledningen till att man spammar Kundo är för att vår domän är relativt trovärdig, och att länkar till spammarens sajt därför är värdefullt.
- Fullt av formatering: Spammarna försöker att få sina länkar klickbara, och skickar därför spam antingen med inbäddad HTML-kod i, eller med BBCode, ett format som är vanligt i många forumverktyg.
- Unika inlägg: Spammarna använder olika IP-nummer, olika namn och e-postadresser, och inga inlägg är samma som har skickats tidigare.
Det svåra med att stoppa spam är att vi ville undvika att vanliga användare fastnar i våra filter.
Vad vi inte ville göra
Ett relativt vanligt sätt att stoppa spam är att visa en suddig bild på några bokstäver, och låta användarna bevisa sig på det sättet. Vi valde snabbt bort det, just för att vi ville hålla trösklarna för att använda Kundo så låga som möjligt.
- Lösningen ska påverka vanliga användare så lite som möjligt. Att kräva svar på frågor eller tyda bilder var alltså inte OK.
- Användare ska inte behöva registrera sig. Sedan Kundos början har vi gjort det möjligt att kommentera på Kundo utan att skapa ett konto. Vi ber bara om namn och e-post, och tror starkt på att det gör att företag som använder Kundo får mer bra feedback än annars.
- Inget manuellt jobb för oss. Kundo drivs av ett litet team på två personer, och att manuellt konfigurera regler för spam är något vi gärna slipper. Vi lägger hellre tid på att förbättra tjänsten för de er alla än att fokusera på de som förstör.
Vår lösning
Vi insåg snabbt att det inte skulle räcka med en lösning, utan att vi skulle behöva kombinera flera på ett intelligent sätt. Sagt och gjort:
- Varje formulär på Kundo har numera ett unikt, användarspecifikt ID kopplat till sig. När formuläret sen skickas så verifierar vi att det ID:t är korrekt. Det går alltså inte att använda samma ID flera gånger, något som gör automatisering svårare. Som en positiv sidoeffekt har vi numera också skydd mot en slags säkerhetsproblem som kallas Cross-Site Request Forgery.
- När inlägget skickas kontrollerar vi om samma inlägg redan finns. Även om vi sett i vår statistik att upprepade inlägg är relativt ovanliga ville vi ändå se till att det inte heller manuellt går att skicka samma inlägg flera gånger. Om vi upptäcker en dubblett skickar vi bara användaren till dubblettinlägget, vilket löser problemet med att någon klickar ”Skicka” två ggr av misstag.
- Manuell blacklist. Eftersom nära 95% av allt spam vi får innehåller länkar formaterade på sätt som vi inte stödjer, så bestämde vi oss för att manuellt filtrera bort detta. Vi räknar med att denna lista kommer att ändras väldigt sällan, och bara när vi ser extremt starka spamtrender.
- Stopforumspam för att filtrera IP-nummer. Eftersom spamverktygen sällan bara spammar en specifik sajt så kan man komma långt genom att samarbeta med andra forum. Stopforumspam är en tjänst som gör precis detta. Dom tillhandahåller ett API där man kan ange ett IP-nummer, och där får fram hur många gånger den IP-adressen har spammat någon av de anslutna forumen. Av våra 300 senaste spaminlägg så upptäcktes samtliga som spam. Av våra 300 senaste icke-spaminlägg markerades ingen felaktigt. Vi fortsätter förstås hålla extra koll framöver, men tjänsten känns väldigt stabil.
- Akismet för att filtrera på innehåll. Akismet är ett verktyg från bloggvärlden, som istället för IP-nummer bygger på filtering själva texten i spammet. Genom att i princip alla som kör WordPress som bloggverktyg bidrar till att förbättra deras regler är precisionen hög även här. För oss blir Akismet ytterligare en nivå av skydd, som kompletterar de andra metoderna bra.
Det är förstås svårt att göra det omöjligt för spammare samtidigt som man gör det lätt för alla andra, men vi tror att vi har hittat en bra balans mellan de båda extremerna, som förhoppningsvis räcker några månader framöver.
Lite avslutande statistik:
- Vi har det senaste dygnet hittat 118 spaminlägg. Efter att ha gått igenom samtliga nya inlägg från idag verkar det som att det faktiskt är 100% rätt, helt utan falska spammarkeringar.
- Vår manuella blacklist fångade 111 av dessa inlägg. Extremt effektivt.
- Stopforumspam fångade 6 inlägg.
- Akismet tog ett inlägg som slank förbi alla de andra kontrollerna.
Transparent och genomtänk, bra jobbat killar!
@Martin: Tack!
Bra jobbat!
Blir inte det 118 inlägg?
@Jens: Tack!
@Behe: Det stämmer bra, jag kunde inte casta ”ett” till ett nummer, så det kom inte med. Fixat.
Snyggt, välskrivet och transparent som vanligt!
@Jonas: Tack!