Captcha je v súčasnosti jedným z najbežnejších spôsobov ochrany bezplatných formátov. Pôvodne nebol vytvorený na ochranu bezpečnosti údajov, ale na ochranu pred spamom a na rozpoznanie, že ide o človeka.
Je však generovaná strojom, takže nie je vždy dokonalá, ale úspešnosť testu captcha sa pohybuje okolo 99 % a iba 1 % obrázkov dokáže dobre vytvorený spamový robot rozlúštiť.
Existuje viac možností, ja napríklad používam toto riešenie:
Ak sa dá test captcha vyriešiť, používateľ je pravdepodobne človek. Je však dobré myslieť aj na používateľov, ktorí úlohu nedokážu vyriešiť, najmä na nevidiacich používateľov. Je to dobré riešenie na kombináciu viacerých možných testov (najmä hlasového prefetchingu). Rozpoznávanie hlasu strojom je však v súčasnosti podstatne efektívnejšie ako čítanie z obrázku. Preto toto riešenie nie je vždy ideálne.
Často stačí vygenerovať prázdny obrázok určitých rozmerov a čitateľne doň zadať niekoľko znakov bez ďalších úprav. Vážne! Väčšina spamových robotov je hlúpa a nedokáže napadnúť všeobecné formuláre s týmto typom ochrany, hoci ide o dokonale čitateľný text, ktorý dokáže lepšie OCR dokonale prepísať.
Výsledný obrázok môže vyzerať takto:
Skúste stránku niekoľkokrát obnoviť a uvidíte, že kód sa zakaždým náhodne zmení. Na demonštračné účely sa len vygeneruje bez uloženia, takže sa odstráni ihneď po načítaní.
Zdrojový kód som vyriešil pomocou knižnice PHPGD, ktorá je k dispozícii prakticky na každej inštalácii PHP a hostingu:
Header("Content-type: image/png");$obr = ImageCreate(100, 35);$pozadi = ImageColorAllocate ($obr, 219, 28, 49); //definícia farby pozadia$bila = ImageColorAllocate ($obr, 255, 255, 255); //definícia bielej farby pre text$styl = array ($pozadi);ImageSetStyle ($obr, $styl);$nahodne_cislo = rand(11111,99999); //vylosovanie náhodného čísla s dĺžkou 5 znakovimagestring($obr, 5, 25, 10, $nahodne_cislo, $bila); //funkcia na kreslenie textu (v tomto prípade čísla)ImagePNG($obr); //vygenerovanie obrazu do pamäte a vykreslenieImageDestroy($obr); //odstrániť obrázok z pamäte (už nebude potrebný, pretože je vygenerovaný raz)
Vykreslenie obrázka je potom už len otázkou HTML:
Upozorňujeme, že tento skript nie je funkčný sám o sebe bez ďalších úprav. Slúži len ako ukážka na vytvorenie jednoduchého obrázka.
Captcha testy sú pomerne spoľahlivé, ale otravné a časovo náročné. Niekedy nie sú čitateľné, preto je dobré dať používateľovi možnosť načítať iný obrázok pomocou javascriptu, aby sa nemusela načítať celá stránka a všetko sa muselo vyplniť znova.
Nezabudnite: To, čo je pre človeka triviálna úloha, nemusí byť pre stroj nikdy dosiahnuteľné riešenie. Preto aj tento primitívny captcha s dokonale čitateľným textom dokáže ochrániť pred viac ako polovicou spamu.
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | sk