Pokud máte nějaký web, který obsahuje formulář pro odeslání komentáře (jako na tomto webu), případně nabízíte nějakou zajímavou službu, dříve či později se setkáte se zneužíváním takového formuláře. V případě odesílání komentářů se velmi často stává že jsou různými automaty odesílané spamy s odkazy na různé pornostránky, casina, viagru no a vlastne všechno co chodí i normálním spamem do e-mailové schránky.
Existuje několik různých druhů ochrany před tímto zneužíváním s různou účinností a s různým dopadem na opravdového uživatele…
Spam a různé jíné zneužívání takovýchto formulářů se většinou provádí automatizovaně. Říká se „nikdo není dokonalý“ my si to jen poupravíme
na „žádný nástroj není dokonalý“ a právě nedostatků spamovacích a jiných nástrojů se budeme snažit využít v náš prospěch.
Ochrana javascriptem
Jedním s nejjednoduších způsobů je upravit formulář tak aby fungoval jenom v prohlížečích podporujících javascript. Ten jsem použil i na tomto webu. Úprava je jednoduchá, prostě jen změníte parametr action vašeho formuláře na jinou adresu. Nejlépe na stránku s upozorněním, že je třeba mít zapnutý javascript. A zároveň přidáte javascript, který před odesláním změní tento parametr na správnou adresu. Můžete také zvolit jinou cestu jak uživatele upozornit na nutnost zapnutého javascriptu a to přidáním prvku noscript s textem upozornění. Implementace tohoto druhu ochrany s upozororněním pro uživatele by pak vypadala takto:
<noscript>Pro odeslání následujícího formuláře
je třeba mít zapnutý javascript</noscript>
<form action="/javascript.html"
onsubmit="this.action='/send.php';return true;"
method="post">
Kde /javascript.html je adresa ke stránce s upozorněním na nutnost zapnutého javascriptu. A /send.php je původní adresa pro odeslání formuláře.
Dopad na uživatele:
Uživatelé jsou nuceni používat prohlížeče umožnující zpracování javascriptu a musejí tuto funkci mít zapnutou. Tím ovšem snižujete dostupnost takto chráněných formulářů pro uživatele používající některé starší nebo textové prohlížeče.
Účinnost:
Většina jednoduchých spamovacích nástrojů nepodporuje zpracování javascriptu a proto tímto způsobem odfiltrujete teké většinu pokusů o automatizovaný spam. Po nasazení javascriptové ochrany na tomto webu, klesl počet spamů z několika desítek denně na 1-2 týdně, což už je únosná mez pro to, abych tyto spamy mohl smazat ručně.
Ochrana pomocí cookies
Dalším způsobem jak se chránit je nasazení cookies. Implementace tohoto řešení již není tak jednoduchá jako javascriptová a je potřeba mít alespoň základní znalosti o programování a funkci cookies. Proto řešení jen nastíním.
Na stránce kde je formulář pro odeslání umístěn je třeba zapsat uživateli nějakou cookie. A tady se nám již cesty dělí na několik variant, všechny tři mají stejný dopad na uživatele, ale různou účinnost.
– Stejná cookie pro všechny – Cookie se zapisuje pro všechny uživatele stejná (např. aktuální datum, nebo nějaká konstanta) a na straně přijmutí požadavku jen zkontrolujete zda-li formulářové data přišly společně se správnou hodnotou v cookie.
– Unikátní cookie – Cookie můžete vygenerovat pro každého uživatele novou. V tom případě si ale musíte takto vygenerovanou hodnotu uložit i na straně serveru abyste ji měli s čím porovnat až přijdou formulářová data s hodnotou v cookie.
– Použití session proměnných – Pokud váš server podporuje tzv. „sessions“, naskýtá se třetí, zřejmě na implementaci nejjednodušší a přitom z těchto metod nejúčinnější, metoda. Na stránce s formulářem zapíšete do session konstantu a tu si zase na stránce s příchozími daty zkontrolujete. O vytvoření a kontrolu unikátní cookie se v tomto případě za vás postará přímo PHP, ASP či jíné rozhraní.
Dopad na uživatele:
V tomto případě je uživatel nucen používat prohlížeč podporující cookies, ale to snad už dnes umí každý prohlížeč včetně těch textových, takže s tímto by neměl být problém.
Účinnost
Problém ale je že tato ochrana není sama o sobě moc učinná, protože stejně jako téměř všechny prohlížeče podporují cookies, tak je podporuje i spousta spamovacích nástrojů. Proto doporučuji případné použití této metody jen jako doplňkové, a kombinovat ji s některou s dalších metod.
interakce – přepisování textu z obrázku
Zatím zřejmě nejúčinnějším druhem ochrany jsou různé způsoby, za kterými se skrývá snaha zjistit zda-li je na „druhé straně drátu“ opravdu lidský uživatel. Jistě jste se již setkali s tím že po vás na některém webu chtěli abyste přepsali text z obrázku do textového políčka. To je přesně tento způsob ochrany. V nedávné době jej nasadil i google na svuj gmail.
Princip je vlastně stejný jako u cookies, na jedné straně vygenerujete nějakou hodnotu, kterou na druhé straně očekáváte. Tento způsob s texty v obrázcích je ale na implementaci docela složitý. Vyžaduje totiž dynamické generování obrázků na straně serveru. To se do jisté míry dá zjednodušit tím že si vygenerujete obrázky dopředu a pak jen použijete jeden z nich.
Dopad na uživatele:
Uživatel je nucen přepisovat pro něj bezvýznamné údaje do políčka. Jenoduše řečeno dost to otravuje. Pokud se tedy rozhodnete pro tento druh ochrany nepřehánějte to 🙂 Přepisování smesice 30ti znaků a čísel je činnost která může některé uživatele úplně odradit od odesílání formuláře. Pokud ale bude písmen třeba jen 5 a v nejlepším případě ještě bude zajištěno aby tvořily slovo, pak už to přepsání není tak hrozné.
Účinnost:
Účinnost je poměrně vysoká, existují však i složitější spamové nástroje, které si s rozpoznáváním textu na obrázcích poradí, některým dokonce ani nedělá problém pokud je na pozadí textu mřížka nebo něco podobného. Proto doporučuji použít nějaký méně obvyklý font, případně můžete zkusit vykreslit každé písměno jinou barvou, nebo písmena mírně deformovat, tak jako to dělá google.
interakce – rozpoznávání obrázku
V obrázku také nemusí být text ale můžete tam dát např. obrázky zvířat nebo čehokoliv jiného. V tom případě ale nemůžete nechat uživateli textové políčko ale budete muset nabídnout rozbalovací nabídku a několik předpřipravených hodnot abyste zajistili že přijde to správné slovo ve správném formátu.
Pro srozumitelnost pokud se uživateli zobrazí tento obrázek:
Nemůžete předpokládat že vám uživatel napíše „mraky“ může totiž také napsat „mrak“, „obloha“ nebo něco jiného uživatelé jsou totiž velice vynalézaví 🙂 Pokud mu ale dáte na výběr mezi kočkou, plotem a oblohou, tak jeho vynalézavost značně omezíte.
Dopad na uživatele:
Uživatel v tomto případě musí pouze kliknout na správnou hodnotu ze selectu.
Účinnost
Ze všech zde popsaných metod má tato nejvyšší účinnost, protože asi neexistuje software, který by byl schopen definovat tvary na fotografiích či kresbách. Na druhou stranu software může náhodně vybrat některou z připravených hodnot, a pak už záleží jen na pravděpodobnosti. Pokud ale přidáte možností na výběr mnoho, pak už je to zase zatěžování uživatele, který si musí tyto hodnoty přečíst a případně i scrollovat.
interakce – kopírování textu
Na závěr jsem si nechal poměrně účinnou metodu s menšími nároky na implementaci. Uživateli můžete zobrazit textové políčko a obyčejný text který do něj má přesunout. Je zde možnost tento text zkopírovat a také je zde možno dát např. pouze jeden znak, protože pokud se spamový nástroj vypořádá s jedním znakem, tak už pro něj nebude problém se vypořádat se znaky třiceti. A čím méně naků, tím méně práce pro uživatele.
Pro představu jak to může vypadat:
Dále už je postup ověřování stejný jako v případe cookies, nebo obrázků.
Dopad na uživatele:
z interaktivních metod ověřování je tato pro uživatele jedna z nejjednodušších, pouze musí opsat správný znak.
Účinnost:
Účinnost tohoto opatření je proti obecným automatizovaným spamovým nástrojům velmi vysoká. Pokud se ale někdo rozhodne přizpůsobit tento nástroj vašemu webu, nebude to pro něj žádný velký problém.
Záměrem tohoto článku bylo osvětlit několik základních metod jak chránit veřejně přístupný formulář před zneužíváním. Jsem si jist že existují další více či méně účinné metody, pokud nějakou znáte podělte se s námi v diskuzi.
Funkci vtipné tečky pro povznesení nálady, jak bývá zvykem na Nově, zde zastane jen odkaz. Pokud chcete znát poněkud vtipnější definici spamu, čtěte zde
Rammi.cz » Google - sorry // Bře 25, 2005 at 10:16
[…] hledávacího okénka firefoxu až do doby než vložíte text z obrázku. Toto je klasická ukázka ochrany formuláře před zneužitím, jak jsem psal již dříve […]
Rammi.cz // Bře 25, 2005 at 11:15
Google – sorry
Už jste to viděli? víte jak posledních pár minut vypadá výchozí domovská stránka firefoxu?
Tuto stránku byste měli najít zde. Stejně dopadnou i vaše pokusy z vyhledávacího okénka firefoxu až do doby než vložíte text z obrázku.
Toto je klasická ukáz…
Já // Čvn 7, 2005 at 11:24
echo „ „.$zaznam [„datum“].“„;
Jiří Herník // Čvn 25, 2006 at 20:39
tak takhle jednoduse to holt hacknout nejde. 😉
Stenlyb // Čvn 6, 2007 at 06:45
tak jsem skusil javaskriptovou ochranu a musím říct že se spamy objevují pořád, sice méně ale pořád.
Jiří Herník // Čvn 6, 2007 at 07:29
to jo, proto doporučuji použít více druhů ochrany… navíc tohle pomáhá jen proti automatickým spamům, pokud to někdo vloží ručně nejde se tomu moc účinně bránit.