Niestety i nasz blog padł ofiarą bota, który uparcie wpisywał idiotyczne komentarze do jednego z artykułów. Moją reakcja na problem było zaimplementowanie mechanizmu Captcha, który w teorii ma uniemożliwić automatom podszywanie się pod ludzi. Ale tylko w teorii, bo większość mechanizmów captcha jest złamana.
Captcha - Completely Automated Public Turing test to tell Computers and Humans Apart, po naszemu i w skrócie będzie to: Test Turinga rozróżniający człowieka od maszyny.
Skąd taka nazwa? Nie mam pojęcia, jest jednak moim zdaniem jest co najmniej na wyrost. A biedny Alan Turing w grobie się przewraca. Zresztą zobaczcie sami, czym jest test Turinga.
Obrazek captcha ma być łatwo rozpoznawalny dla człowieka, jednak ma stanowić trudność dla automatów. Należy pamiętać, że do łamania zabezpieczeń captcha wystarczy odpowiednio przygotowane oprogramowanie OCR.
Przygotowałem więc klasę Captcha, której zadaniem jest generowanie i weryfikacja kodów-obrazów. Zdaję sobie sprawę, że mechanizm, który zaimplementowałem ma parę słabości i warto by było wprowadzić kilka usprawnień, np. zmieniać krój czcionek poszczególnych znaków, nie trzymać stałej odległości pomiędzy znakami, powyginać fonty, etc.
Zresztą o słabości captcha poczytajcie tu: http://ocr-research.org.ua/list/ppage/1.html
Jednak, w naszym wypadku zabezpieczenie powinno być wystarczające. Raczej nie muszę się obawiać, że ktoś będzie budować sieć neuronową w celu łamania zabezpieczeń na Leniwcach. Są smaczniejsze kąski :).
Oddaje więc klasę, której zadaniem jest generowanie captcha. Jej zaletą jest banalne użycie.
Przykład działania zobaczycie na stronie testowej http://www.leniwce.com/examples/captcha/ lub po prostu dopisując komentarz do artykułu.
Cały kod przykładu wygląda tak:
< ?php include "Captcha.php"; $c = new Captcha("tmp/"); $code = $c->makeCheckImage(); if (isset(__GET["action"])) { if ($c->checkCode(__POST["wpisanyKod"],__POST["weryfikacja"])) echo "Kod OK"; else echo "Sorki, zly kod :("; } echo "< h2>Wpisz kod z obrazka< /h2>"; echo "< form method='post' action='?action=test'> < img src='tmp/".$code.".jpg' style='margin-right: 10px;vertical-align:middle;'> < input type='text' name='wpisanyKod'/>< br/> < input type='hidden' value='$code' name='weryfikacja'/>< br/> < input type='submit' value='Test'/> < /form>"; ?>
$c = new Captcha("tmp/");
$code = $c->makeCheckImage();
< img src='tmp/".$code.".jpg' style='margin-right: 10px;vertical-align:middle;'> < input type='text' name='wpisanyKod'/> < input type='hidden' value='$code' name='weryfikacja'/>
if ($c->checkCode(__POST["wpisanyKod"],__POST["weryfikacja"])) echo "Kod OK"; else echo "Sorki, zly kod :(";
Do pobrania: captcha.zip (źródło wraz z przykładem).
|
|