CAPTCHA je obecně způsob, jak rozeznat člověka od robota. Jedním z rozdílů mezi spambotem a člověkem je, že bot vám na stránku přidá komentář během pár mirkosekund, kdežto uživateli to bude určitě trvat mnohem déle jak pět sekund. Implementace je potom jednoduchá. Při odesílání formuláře odešleme ve skrytém poli informaci o čase vygenerování formuláře spolu s hashem, který nám zajistí, že čas spambot neupraví.
$secretKey = 'Nějaký_náhodný_řetězec.'; //salt pro md5()
/* Generování formuláře - zápis času a hashe */
$time = time();
$timeCaptcha = $time.'-'.md5($time.$secretKey); //vytvoření řetězce, který přijde do hidden inputu ve formuláři, je tvořen časem a hashem vytvořeným z času a tajného klíče (salt)
/* Zpracovávání formuláře - kontrola, zdali vyhovuje čas a hash odeslaný formulářem */
$delay = 5; //čas v sekundách, určuje minimální rozdíl dob mezi vytvořením a zpracováním formuláře
$e = explode('-', $_POST['timecaptcha']; //získání času a hashe z formuláře
if (time() > ($e[0]+$delay) && md5($e[0].$secretKey) == $e[1]) {
//vyhovuje časové CAPTCHA
} else {
//nevyhovuje
}
Taková orchrana jistě pomůže při vyvtváření kvalitní CAPTCHA. Podobných jednoduchých metod je více a je vhodné je kombinovat. Opisování obrázků by měla být poslední možnost.
O této technice jsem kdysy četl, už bohužel ale nevím kde. V dotyčném článku byla technika zmíněna jen okrajově a chyběla její implementace. Této technice fandím a myslím, že by mohla být i v základu nějakých CMS.
Tags: CAPTCHA

