CAPTCHA
| Po angielsku | CAPTCHA (reCAPTCHA, Turnstile) |
|---|---|
| Którą formą pisać | bez tłumaczenia Skrót, nazwa własna albo nazwa standardu — nie tłumaczymy w ogóle. |
| Inne formy | captcha · reCAPTCHA · Turnstile · zabezpieczenie antyspamowe |
| Kategoria | Strony WWW, WordPress i hosting |
CAPTCHA to test, który ma odróżnić człowieka od programu, zanim strona przyjmie formularz. Nazwa jest skrótem od „Completely Automated Public Turing test to tell Computers and Humans Apart” [1]. Według W3C to zadanie łatwe dla człowieka, a trudne dla automatu [1]. Na stronach internetowych CAPTCHA chroni formularze logowania, rejestracji, komentarzy i kontaktu przed złośliwymi botami.
Jak działa
Klasyczne CAPTCHY pokazują zniekształcone znaki do przepisania [1]. Nowsze usługi oceniają ryzyko w tle i pokazują zadanie tylko wtedy, gdy ruch wygląda podejrzanie, albo nie pokazują go wcale [4]. Niezależnie od odmiany schemat jest ten sam: widżet w przeglądarce zwraca token, a serwer strony musi ten token sprawdzić u dostawcy usługi. Pokazuje to schemat poniżej.
Krok weryfikacji po stronie serwera jest obowiązkowy. Dokumentacja Cloudflare mówi wprost, że sam widżet w przeglądarce nie chroni formularza, a token niesprawdzony na serwerze można podrobić [5]. Token Turnstile jest ważny 300 sekund i można go zweryfikować tylko raz [5]. Token hCaptcha także jest jednorazowy i domyślnie wygasa po 120 sekundach [6], a token reCAPTCHA po dwóch minutach [3]. Klucz tajny służący do weryfikacji nie może trafić do kodu po stronie przeglądarki [5].
Odmiany
Popularne usługi różnią się tym, czy użytkownik w ogóle widzi zadanie.
| Usługa | Jak działa | Wynik dla serwera |
|---|---|---|
| reCAPTCHA v3 | bez interakcji, ocena każdego żądania [3] | wynik od 0,0 do 1,0 [3] |
| Cloudflare Turnstile | tryby zarządzany, nieinteraktywny, niewidoczny [4] | token do Siteverify [5] |
| hCaptcha | zadanie do rozwiązania [6] | token do siteverify [6] |
W reCAPTCHA v3 decyzję podejmuje właściciel strony. Google proponuje na początek próg 0,5 i zaleca sprawdzać przy weryfikacji, czy nazwa akcji zgadza się z oczekiwaną [3]. Turnstile działa bez kierowania ruchu strony przez Cloudflare i według dostawcy nie odczytuje treści formularzy [4].
Szczegóły wdrożenia też mają znaczenie. Google zaleca wywoływać ocenę reCAPTCHA v3 w chwili, gdy użytkownik wykonuje chronioną akcję, a nie przy ładowaniu strony, bo token wygasa po dwóch minutach [3]. Nazwy akcji mogą zawierać tylko litery, cyfry, ukośniki i podkreślenia i nie powinny zależeć od konkretnego użytkownika [3]. W Turnstile tryb zarządzany sam decyduje, czy pokazać pole wyboru, tryb nieinteraktywny nigdy nie wymaga działania odwiedzającego, a tryb niewidoczny ukrywa widżet całkowicie [4]. Dokumentacja hCaptcha ostrzega, że nazwa hosta zwracana przy weryfikacji pochodzi z przeglądarki i nie może służyć do uwierzytelniania; nadaje się tylko do statystyk [6].
W WordPressie
WordPress dodaje CAPTCHA wtyczką albo w ustawieniach wtyczki formularzy. Przykładowo wtyczka hCaptcha for WP obsługuje formularze logowania, rejestracji, przypomnienia hasła i komentarzy, a także WooCommerce, Contact Form 7 i ponad 60 innych wtyczek i motywów [7]. Jej kreator pozwala przejść z reCAPTCHA albo Turnstile [7].
Przy wdrożeniu warto sprawdzić trzy rzeczy:
- czy CAPTCHA obejmuje wszystkie formularze, przez które da się zalogować, założyć konto albo wysłać treść;
- czy wtyczka weryfikuje token na serwerze, a nie tylko wyświetla widżet [5];
- czy formularz logowania ma też limit prób logowania, bo CAPTCHA nie jest jedyną warstwą.
Widżet CAPTCHA jest usługą zewnętrzną, więc przy wyborze liczy się też podejście dostawcy do danych odwiedzających. Dostawca hCaptcha deklaruje na stronie wtyczki certyfikaty ISO 27001 i 27701 oraz udział w programie Data Privacy Framework [7].
Ograniczenia
CAPTCHA spowalnia automaty, ale ich nie zatrzymuje. OWASP pisze, że test przy logowaniu pomaga wykrywać boty i może spowolnić credential stuffing i password spraying, ale istnieją narzędzia i usługi, które łamią CAPTCHY z dość wysoką skutecznością [2]. Sygnałem takiego obejścia jest nienaturalnie wysoki odsetek rozwiązanych testów [2]. W3C dodaje, że rozpoznawanie znaków coraz łatwiej pokonuje tekstowe CAPTCHY, a część ataków korzysta z ludzi opłacanych za rozwiązywanie zadań [1].
Drugim ograniczeniem jest dostępność. W3C zwraca uwagę, że prośba o odczytanie zniekształconych znaków wymaga od osób niewidomych albo z dysleksją zadania, którego najtrudniej im wykonać, a wersja dźwiękowa wyklucza osoby głuche [1]. OWASP ostrzega, że blokowanie przeglądarek bez JavaScriptu utrudnia korzystanie ze strony osobom używającym czytników ekranu [2].
Dobre praktyki
OWASP proponuje pokazywać CAPTCHA tylko przy żądaniach podejrzanych, na przykład z nietypowej lokalizacji albo znanego serwera proxy, zamiast przy każdym logowaniu [2]. W3C wśród alternatyw bez interakcji wymienia pułapki typu honeypot, czyli ukryte pola formularza, rate limiting dla nowych kont, analizę zachowania i filtry antyspamowe [1]. Wśród metod interaktywnych wskazuje reCAPTCHA v3, FIDO2 / WebAuthn i uwierzytelnianie wieloskładnikowe [1]. Przeciw spamowi w komentarzach i atakom siłowym (brute-force) te metody można łączyć z CAPTCHA, zamiast polegać na jednej warstwie.
Fałszywa CAPTCHA
Znajomy wygląd testu wykorzystują przestępcy. CERT Polska 20 listopada 2024 roku ostrzegł przed stronami, które udają weryfikację CAPTCHA i każą wcisnąć Win+R, potem Ctrl+V i Enter [8]. W ten sposób użytkownik sam uruchamia polecenie wcześniej skopiowane do schowka, które instaluje infostealer Lumma Stealer [8]. CERT Polska przypomina, że żadna prawdziwa CAPTCHA nie wymaga wychodzenia poza stronę internetową [8]. Szerzej opisuje to hasło fałszywa CAPTCHA.
Przypisy
8- [1] Inaccessibility of CAPTCHA: Alternatives to Visual Turing Tests on the Web · W3C
- [2] Credential Stuffing Prevention Cheat Sheet · OWASP
- [3] reCAPTCHA v3 · Google for Developers
- [4] Cloudflare Turnstile · Cloudflare
- [5] Turnstile: Server-side validation · Cloudflare
- [6] hCaptcha Developer Guide · hCaptcha
- [7] hCaptcha for WP · WordPress.org
- [8] Uwaga fałszywa CAPTCHA, czyli nie daj się zainfekować · CERT Polska