Spam, spam, spam

Hvad stiller man op med 190.000 spam-kommentarer på en WordPress website?

For nylig blev vi bedt om at hjælpe med at rydde op på en WordPress website hvor ejeren var træt af de mange spam-kommentarer der hele tiden kom væltende. Nemt, tænkte vi - log ind i WordPress, slet de uønskede kommentarer, og sæt Akismet på så spam automatisk slettes frem over. Vi blev imidlertid noget overraskede da vi loggede ind og kiggede under "kommentarer" - der lå 188.798 kommentarer og afventede godkendelse.

Hvad stiller man op i den situation? WordPress viser 20 kommentarer pr. skærm, men hvis vi skulle slette dem 20 ad gangen skulle vi igennem næsten 9.500 skærmfulde før vi var færdige. Det er ganske vist muligt at vise et større antal ad gangen (klik på "skærmindstillinger" øverst til højre og ret "20" til et større tal), men hvis man skruer det op til f.eks. 1.000 kommentarer pr skærmfuld tager det rigtig lang tid hver gang WordPress skal hente dem ind, så det ville stadig tage det meste af dagen at slette dem alle sammen.

Løsningen var at gå direkte til databasen. Websitet lå ikke på vores servere, men heldigvis var PHPMyAdmin til rådighed via kontrolpanelet. Hvis WordPress er installeret med standard "wp_" tabelpræfiks, så ligger kommentarerne i tabellen wp_comments. Vores første indskydelse var at tømme tabellen helt, men der var også nogle hundrede rigtige kommentarer som vi gerne ville beholde.

En af kolonnerne i wp_comments hedder comment_approved. Hvis der står et "1"-tal her så er kommentaren godkendt, og hvis der står "0" betyder det at den afventer godkendelse. Vi brugte denne SQL-kommando til at slette alle de ikke-godkendte kommentarer:

DELETE FROM `wp_comments` WHERE `comment_approved` = 0

Nogle få sekunder senere var alle spam-kommentarerne pist væk.

Inden man begynder at slette direkte i databasen er det selvfølgelig en god ide at sikre sig en backup - det er let at komme til at lave fejl, især hvis man ikke er specielt SQL-kyndig. Man kan også prøve at teste med ikke-destruktive metoder først, f.eks. kan man bruge denne stump til at tælle alle de ikke-godkendte kommentarer inden man sletter dem:

SELECT COUNT(*) FROM `wp_comments` WHERE `comment_approved`=0

Hvis resultatet af COUNT() svarer til det antal ikke-godkendte kommentarer man ser i WordPress er der grund til at tro at SQL-sætningen rammer de rigtige rækker.

Efter at vi var sluppet af med spam-kommentarerne lod vi siden stå ubeskyttet et par timer for at se hvad der skete. I løbet af to timer var der kommet næsten 200 nye spam ind, så de 188.798 vi startede med kunne være kommet i løbet af mindre end tre måneder.