Captcha jest obecnie jednym z najbardziej rozpowszechnionych sposobów ochrony wolnych formatów. Pierwotnie został stworzony nie po to, by chronić bezpieczeństwo danych, ale by chronić przed spamem i rozpoznawać, że jest to człowiek.
Jest ona generowana maszynowo, więc nie zawsze jest idealna, ale wskaźnik powodzenia testu captcha wynosi około 99%, a tylko 1% obrazów może zostać rozszyfrowanych przez dobrze przygotowanego robota spamowego.
Istnieje więcej opcji, ja na przykład korzystam z tego rozwiązania:
Jeśli test captcha da się rozwiązać, użytkownik jest prawdopodobnie człowiekiem. Dobrze jest jednak pomyśleć o użytkownikach, którzy nie są w stanie wykonać zadania, zwłaszcza o użytkownikach niewidomych. Dobrym rozwiązaniem jest łączenie wielu możliwych testów (zwłaszcza prefetching głosu). Jednak obecnie rozpoznawanie głosu przez maszynę jest znacznie bardziej efektywne niż odczytywanie obrazu. Dlatego to rozwiązanie nie zawsze jest idealne.
Dość często wystarczy wygenerować pusty obraz o określonych wymiarach i wprowadzić do niego kilka znaków w sposób czytelny bez dalszej edycji. Poważnie! Większość botów spamowych jest głupia i nie potrafi atakować formularzy ogólnych z tego typu zabezpieczeniami, mimo że jest to doskonale czytelny tekst, który lepszy OCR może doskonale przepisać.
Otrzymany obraz może wyglądać następująco:
<img src="captcha.php" alt="ukázková captcha">
Spróbuj odświeżyć stronę kilka razy, a zobaczysz, że kod zmienia się losowo za każdym razem. W celach demonstracyjnych jest on generowany bez zapisywania, a więc jest usuwany natychmiast po załadowaniu.
Kod źródłowy rozwiązałem za pomocą biblioteki PHPGD, która jest dostępna praktycznie na każdej instalacji i hostingu PHP:
Header("Content-type: image/png");$obr = ImageCreate(100, 35);$pozadi = ImageColorAllocate ($obr, 219, 28, 49); //definicja koloru tła$bila = ImageColorAllocate ($obr, 255, 255, 255); //definicja koloru białego dla tekstu$styl = array ($pozadi);ImageSetStyle ($obr, $styl);$nahodne_cislo = rand(11111,99999); //wylosowanie losowej liczby o długości 5 znakówimagestring($obr, 5, 25, 10, $nahodne_cislo, $bila); //funkcja do rysowania tekstu (w tym przypadku liczby)ImagePNG($obr); //generowanie obrazu w pamięci i renderowanieImageDestroy($obr); //usuń obraz z pamięci (nie będzie już potrzebny, ponieważ został wygenerowany raz)
Renderowanie obrazu jest wtedy tylko kwestią języka HTML:
<img src="captcha.php">
Należy pamiętać, że ten skrypt nie działa samodzielnie bez dalszych modyfikacji. Służy on jedynie jako demonstracja generowania prostego obrazu.
Testy Captcha są dość wiarygodne, ale irytujące i czasochłonne. Czasami nie są one czytelne, dlatego dobrze jest dać użytkownikowi możliwość załadowania innego obrazu za pomocą javascript, aby nie trzeba było ponownie ładować całej strony i wypełniać wszystkiego od nowa.
Pamiętaj: To, co jest trywialnym zadaniem dla człowieka, może nigdy nie być osiągalne dla maszyny. Dlatego nawet ta prymitywna captcha z doskonale czytelnym tekstem może chronić przed ponad połową 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: ... | pl