Nyní je tedy, při každém vložení komentáře, třeba ještě vložit čtyři kontrolní znaky, které jsou zobrazeny pomocí obrázku. Obrázek je zatím jednoduchý, neboť si nemyslím, že by někdo používal "text recognition" algoritmus, ale uvidíme. Celé jsem to provedl velmi jednoduše a postup popisují následující kroky:
- vygeneruji náhodný alfanumerický řetězec, to je klíč
- z tohoto klíče odvodím explicitním algoritmem čtyřznakový kód
- do formuláře vložím skryté pole s hodnotou klíče pro kontrolu při vkládání (šlo by to předávat pomocí SESSION proměnné, aby se útočník vůbec nedostal ke klíči, ale myslím, že je dost těžké z klíče odvodit kód)
- kód zobrazím jako obrázek (návod najdete v PHP manuálu u popisu imagecreate), pomocí parametru GET mu předám klíč
- při vkládání kontroluji, jestli kód (vytvořený z klíče) je stejný jako zadaný řetězec
Nakolik je moje jednoduché řešení účinné se dozvím časem. Pokud bude třeba, napadá mne několik vylepšení, ale toto řešení mne stálo asi 40 minut času.
Servus,
no zda sa mi to komplikovane :). Ja som rozlyslal nad niecim takym:
- spamrobot nidky nevie, ktore polozky maju byt vyplene, tak vyplni vsetky. Takze co to spravit tak, ze jedno policko (input) nesmie byt vyplene a aby to uzivatela nemylilo, tak ho pomocou css schovat. Co ty na to?
Skusil som to vziat z druheho konca...:)
odpověď na [1]piler: Podobná myšlenka mne také napdla, ale netuším jak tito roboti pracují. Jestli prostě vezmou stránku a najdou všechnu formulářové prvky, které vyplní. Nebo jestli to někdo poprvé vyplní ručně a pak to nechá dělat robota.
Každopádně je to zajímavé řešení, které by neotravovalo uživatele.
odpověď na [2]Samuraj: no robot musi vediet aky ma byt nazov formularoveho prvku, ktory nema menit a ten by sa mohol menit...hash: den + retazec...takze keby si ho naucil, ze nevyplnaj asdk3a23 tak na dalsi den, aleho hodinu by ten nazov bol iny...
popripade hashovatat aj ostatne prvky...
odpověď na [1]piler: Tak jsem zkusil tuhle metodu se skrytým inputem, který se nesmí vyplnit. Přišel mě tak jeden SPAM týdně, což není moc, ale pořád to není ideální.
Pak jsem zkusil udělat checkbox, který je zatržený a uživatel ho musí odškrtnout, to mě přišlo hned spousta SPAMu.
Takže jsem se zase vrátil k zadávání kódu. To mě zatím nepřišel žádný SPAM.
Zrovna jsem se komentářovým spamem opět zabýval a raděj než obrázek používám početní příklad + několik dalších triků, včetně nastrčeného inputu a zatím učinek velmi dobrý.
(viz. http://smitka.org/blog/komentarovy-spam)
Boji zdar
Super článek!
odpověď na [1]piler: Jo, dělám to podobně. Mám na to několik metod. Vytvořím políčko NICK o velikosti 1x1 bod, robot do něj bezpečně vloží nějaké jméno, ale já testuju, zda je prázdné. Pokud předávám povinný e-mail, políčko pojmenuju třeba PLECHOVKA, takže mi tam robot nikdy email nevloží. Ale já testuju, zda je tam alespoň zavináč. Do dalšího políčka (pojmenovaného opět nějak netradičně) vkládám lehce zašifrovaný čas ve vteřinách a při zpracování testuju, zda čas není větší, než půlhodina (tím zároveň nastavuji platnost formuláře). Podobných metod mám víc a v kombinaci všech jsem robotické zprávy odfiltroval