27. 3. 2006, 17.08
Jako provozovatel webu s <acronym title=„PageRankem“>PR</acronym> 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:
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.
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.
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
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.
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?).
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.