(Můj) boj s komentářovým spamem

Jako provozovatel webu s <acronym title=„PageRan­kem“>PR</acro­nym> 5 a relativně velkou návštěvností – a tudíž webu, který nezanedbatelnou měrou přitahuje nejrůznější spamovací roboty – se musím zabývat účinnou ochranou proti spamu. Komentářovému i referrerovému (o tom bude řeč v příštím příspěvku).

Logy pro doménu finwe.info zaznamenají denně cca 400 návštěv. Poté, co se mi v komentářích začal objevovat spam (podstata jeho „prudivosti“ je jasná), musel jsem si vybrat, jakou metodu filtrování spamu použít. V úvahu připadaly tyto:

Nepoužitá metoda: Captcha

Komentářový spam na jednom z ných webů Finta metody Captcha spočívá v tom, že s pomocí knihovny pro generování obrázků se vyrobí obrázek, na kterém je určitý počet čísel. Vzhled obrázku závisí na „kvalitě“ algoritmu – číslice mohou být různě pootočena, s různou barvou, s rušivým pozadím. Všechny tyto „serepetičky“ navíc mají jediný úkol: znemožnit spambotovi přečíst čísla z obrázku a zadat je do formulářového pole vedle. Počítá se s tím, že robotovi se to nepodaří, zatímco člověku ano – pokud jsou tedy čísla opsána správně, můžeme komentář přidat.

Výhody
Velká úspěšnost odchytávání spamu.
Nevýhody
nepřístupnost (co uživatelé bez obrázků?),
uživatelsky nepřívětivé (opisovat pět čísel…).

Nepoužitá metoda: Potvrzování komentářů autorem

Idea tohoto způsobu boje je jednoduchá: komentář se nepřidá, pokud jej autor neodsouhlasí. Ve své syrové verzi je tak přidávání komentářů sice bezpečné (v tomto ohledu lidský faktor většinou nezklame), ale uživatelům stránek neumožňuje reagovat tak rychle, jako kdyby se komentář přidal okamžitě.

Tuto metodu je možné vylepšit: Komentářový spam většinou těží z toho, že do svého těla umisťuje odkazy na jiné, především nekalé webové stránky. Při tomto předpokladu necháme potvrzovat autorem pouze ty komentáře, které obsahují odkazy.

Výhody
vysoká efektivita (při schvalování všech komentářů).
Nevýhody
nemá-li spam v těle odkazy, projde (selektivní potvrzování komentářů),
možná pomalá odezva autora (schvalujícího),
při většímm rozsahu webu náročné na lidské zdroje.
možné nutkání k cenzuře ;-).

Nepoužitá metoda: SetEnvIf a mod_access

Tato metoda je poněkud náročnější a specifičtější. Má nároky na specifické moduly serveru a navíc vyžaduje, aby měl provozovatel webu možnost tyto moduly konfigurovat. Její nevýhoda je také v tom, že musíme znát adresy (ať už IP či URI), odkud spammeři útočí.

Pomocí SetEnvInf (editací souboru .htaccess) se pro všechny adresy spamovacích robotů nastaví zvláštní prostředí (environment)

SetEnvIfNoCase Request_URI „.spammer.cgi“ comment_spam SetEnvIfNoCase Request_URI „.cmtspam.php“ comment_spam

Pokud se některý z regulárních výrazů shodne s Request URI, přiřadí se mu proměnná prostředí comment_spam. Pak o toto prostředí zakážeme pomocí mod_access přístup. Stejně tak jde zakázat přístup pro jednotlivé IP.

Order Allow,Deny Deny from env=comment_spam Deny from 159.187.56.77
Výhody
zachyceným spammerům se zobrazí chyba 403,
z předchozího vyplývá, že existuje šance, že to spammeři vzdají,
pokud je „blacklist“ dostatečně rozsáhlý, pak je velká účinnost.
Nevýhody
náročné na server a jeho konfigurovatelnost uživatelem,
neúčinné při malém „blacklistu“,
nutnost znát URI či IP spammera.

Nepoužitá metoda: Bayesovský filter

Bayesovský „učící se“ filtr poznala většina uživatelů (třeba i nevědomky) při boji se spamem v e-mailech. Filtr si do vlastní databáze ukládá, co spam je a co není a podle toho pak rozhoduje, zda komentář (resp. e-mail) pustit, nebo ne.

Výhody
stále se učí, pak je velmi účinný,
pokus je skript kvalitní, učení je jednoduché
Nevýhody
nutná databáze výrazů
skripty jsou složité
skripty se špatně shánějí

Použitá metoda: Triviální matematický příklad

U metody, kterou jsem použil, vycházím z toho, že spambot je zvyklý zadávat jméno, email, web, nadpis a text. Více toho moc neumí. Proto stačí do formuláře přidat jeden input s příkladem (jako zde, např. 1+1). Pokud uživatel vyplní dvojku, text komentáře se přidá.

Efektivita této metody je pro web rozsahu mého naprosto dostačující. Kdyby se ale botům přeci jen povedlo ochranu překonat, lze příklad generovat a třeba i použít text (kolik je tři a pět?).

Výhody
Pokud je příklad statický, lze hodnotu po úspěšnén zadání uložit do cookie a předvyplňovat.
Přístupné řešení (narozdíl od metody Captcha)
Nevýhody
Šance, že spammeři statický příklad překonají

Shrnutí

Předchozí metody jsou náhledem do boje s komentářovým spamem. Běžnou poučkou, pro nás, Čechy budiž, že se stačí vyhýbat angličtině – Vzkazovník místo guestbook, zprava místo text, jmeno místo name. Spammeři pak formulář déle hledají.

Computer$, (Web)design

Komentáře

xom

28. 3. 2006, 9.36

Pěkné shnutí, ještě bych zmínil řešení, které vymyslel a publikoval Jakub Vrána – http://php.vra&#…, které je podobně vtipné a nenáročné jako to tvoje..

Mimojiné určitě záleží na kvalitě algoritmů různých robotů, někteří se chytí do jedné jiní do druhé sítě, navíc jsou roboti programováni lidmi, kteří je den ode dne vylepšují a zajisté sledují vývoj v boji proti nim – tvé řešení je elagantní a jednoduché, ale pouze do doby, dokud ho používáš jenom ty či úzký kruh lidí..


Actimel

27. 9. 2006, 23.57

Jak tak sleduju, je metoda triviálního matematického příkladu stále častější. Narazil jsem na ni již na větším množství stránek. Předpokládám, že pokud se počet uživatelů této metody bude dále zvyšovat stejným tempem, brzy ji roboti překonají.

BTW: kolik je tři a (plus) pět mi přijde o hodně účinnější než 3 + 5 =


Finwe

28. 9. 2006, 9.54

Zatím funguje se 100% úspěšností. Až přestane, otázku změním, případně přidám ještě jiný mechanismus.


Vložit komentář

K tomuto příspěvku není povoleno přidávat komentáře.