CAPTCHA to skrót określający zautomatyzowany test turinga, który można by przeprowadzić na różne sposoby, ale w tym artykule będę udawał, że chodzi jedynie o obrazki z literami do przepisania.

Nie ma czegoś takiego jak dobra CAPTCHA, bo wszystkie wymagają od użytkownika fatygi. Można jedynie zrobić złe, bardzo złe albo bardzo złe i na dodatek nieskutecznie.

Wiele CAPTCHA w Sieci jest kiepsko wykonanych i “działa” wyłącznie dlatego, że nikomu nie chciało się ich łamać (zobacz przykłady podlinkowane na końcu artykułu).

Jeśli nie jesteś webmasterem naprawdę wielkiego serwisu, to zamiast CAPTCHA zrób mniej inwazyjne zabezpieczenie, którego też nikomu nie będzie chciało się łamać.

Nieczytelne dla ludzi

Test ma być jak najłatwiejszy dla człowieka i jak najtrudniejszy dla maszyny. Niestety, wielu autorów daje się zmylić, że jeśli dla nich obrazek jest nieczytelny, to też będzie dla maszyny. Przeciwnikiem CAPTCHA jest program(ista) OCR, który ma do dyspozycji szeroką gamę narzędzi podobnych do filtrów programów graficznych.

W szczególności złymi pomysłami są:

Użycie wymyślnych krojów pisma tylko trochę wzmacnia zabezpieczenie — OCR może spróbować łamać obrazek za pomocą różnych krojów i wybrać najpewniejszy wynik. Podobnie z obracaniem liter — dodaje etap przy łamaniu i zwiększa szansę pomyłki, ale zaaplikowane w granicach czytelności dla ludzi jest niewielką barierą.

Kompletne wpadki

Najzabawniejsze są CAPTCHA, które da się złamać bez analizy obrazka. Niektórzy autorzy, którzy koniecznie chcą obrazek, a nie rozumieją dlaczego, potrafią zmontować CAPTCHA z kilku osobnych obrazków przedstawiających pojedyncze litery lub generować CAPTCHA skryptem, który dostaje tekst jako parametr.

Month of Bugs in Captchas ma pełno przykładów stron (w tym Google!), które dają się wrobić w akceptowanie jednej i tej samej odpowiedzi do dowolnej ilości postów, itp.

Proste do łamania są też CAPCHA mające stałe rozmieszczenie liter pisanych tym samym krojem pisma — wtedy wystarczy sprawdzić kilka strategicznych pikseli, by rozróżnić litery.

Widziałem też kilka razy rozwiązanie, gdzie autor sam przygotował paręnaście obrazków. Jeżeli jest niewielka liczba możliwości, to człowiek może opisać botowi, który obrazek, jaki ma tekst, a nauczony bot sam już wyśle tysiące spamów.

Słabiusieńkie są oczywiście bezobrazkowe alternatywy. Można w parę minut napisać bota rozwiązującego proste działanie matematyczne albo klikającego n-ty guzik formularza. Szkoda fatygi, w takich przypadkach lepiej robić zwykłe filtrowanie.

BTW: Jeśli już implementujesz CAPTCHA, to upewnij się, że użytkownik musi je wpisać raz i tylko raz. Zapamiętaj sobie rozwiązane CAPTCHA w sesji i nie każ go ponownie wypełniać przy podglądzie albo jeśli każesz poprawić błędne/brakujące pola formularza.

To co jest trudne?

Od strony wizualnej Google kuma o co chodzi.

Przykłady pokonanych zabezpieczeń, czyli kapcza kaput

Powyższe zostały złamane przez algorytmy automatycznie “czytające” litery. Da się bez tego — CAPTCHA można złamać za pomocą pornografii albo taniej siły roboczej.

Ta w phpBB2 jest śmiechu warta, a phpBB3 super prosta. Mogliby od razu wypełniać pole tekstem do “przepisania” ;)

Ukrainiec, który łamie CAPTCHA i sprzedaje algorytmy spamerom. Większość super-kolorowych powyginanych zamotanych obrazków to dla niego łatwy zysk. Chiński hacker potwierdza, że kolorowe ciapki są dla amatorów.

Słynna PWNtcha. Uwaga: ten skrypt nie jest łamaczem ogólnego przeznaczenia. To, że nie złamie obrazka, który mu podeślesz, wcale nie oznacza, że twoja CAPTCHA jest mocna, bo:

Badania dotyczące trudności przeszkód w CAPTCHA z przykładami.

Na deser o tym, jak CAPTCHA wkurza użytkowników, obrazkowo:)