Lemat, strona prywatna

Lepsza captcha

Spamerzy są wszędzie, boję się wręcz otworzyć lodówkę. Używanie obrazków potwierdzających ("captcha", "test turinga") staje się wręcz koniecznością. Ostatnio jednak trafiłem na problem - na pewnym forum phpBB2 spamerzy "przechodzili" rejestrację pomimo użycia tego zabezpieczenia. Najpierw myślałem, że po prostu siedzi tysiąc Chińczyków i przepisują kod. Ale spojrzenie w logi rozwiało wątpliwiości - nikt nie jest w stanie wypełnic formularza rejestracji w cztery sekundy.

Wniosek jest jeden - używają oprogramowania do odczytywania tekstu z grafiki - OCRa.

Dotychczasowe zebezpieczenie wyglądało tak:
zła captcha

Zrobiłem wiec trochę lepszą wersję, która wygląda tak:
wersja 1

Jaka jest różnica:

  1. Jest to kolorowe
  2. Tło jest obrazkiem
  3. Jest użyty font typu TTF (kształt literek jest inny i można go dowolnie zmieniać ściągając inny font)
  4. Kolor, pochylenie i rozmiar fontu
  5. Tekst jest przezroczysty
  6. Zawiera wyraźny tekst małą czcionką (zmyłka)

Minusy: trzeba dobrze dobrać obrazek oraz trzy parametry: "jasność", "nasycenie" i "alpha" aby napis był czytelny dla ludzi.

To wszystko powinno pomóc w oszukiwaniu OCRa.

Kod można pobrać stąd: captcha.phps

Kod w miarę możliwości usiłuje dostosować wielkość napisu do wielkości obrazka, jednak zgłupieje jak da mu się zbyt długi napis i zbyt wąski obrazek. Jeżeli nie będzie pliku z tłem to oczywiście będzie błąd. Jeżeli nie będzie pliku z fontem, to nie będzie napisu na obrazku. Wymagany jest moduł GD2 i Truetype (powinno być na większości hostingów).

Wszelkie uwagi mile widzane. Łącznie ze statystykami skuteczności.

Na stronie http://pornel.net/captcha jest opisane jak wygląda zła captcha. Pozwolę sobie nie zgodzić się z jednym argumentem - kolor. Kolor ma znaczenie. Obecne spamerskie OCRY nie potrafią w ogóle radzic sobie z kolorowymi obrazkami. Ponadto etap OCRowania który najpierw sprowadza obrazek do odcieni szarości pozwolę sobie przedstawić na podstawie 2 poniższych obrazków:


Drugi obrazek powstał po przekształceniu do odcieni szarości i wyostrzeniu krawędzi - brakuje litery H - mój program nie znalazł tam krawędzi. Trzeci, czwarty i piąty obrazek to efekt nałożenia filtrów wyostrzających krawędzie bez etapu sprowadzania do szarości.



Czego to dowodzi? - Każdą captchę da się złamać. Jest to tylko problem opłacalności. A jaki z tego wniosek? Unikajmy takich rozwiązań, które już ktoś zastosował w tysiącach egzemplarzy.


Zrobiłem jeszcze jedną captchę:

wersja 2

Niestety po przefiltrowaniu w programie graficznym na obecność krawędzi wyszło takie coś:

wersja 2a
wersja 2a

Kod jest do pobrania stąd: captcha2.phps


Pozmieniałem trochę:

wersja 3

I już filtr krawędzi daje zupełnie inny obraz:

wersja 3a
wersja 3a

Niestety captcha jest słabo czytelna :(

Kod jest do pobrania stąd: captcha3.phps


Chciałbym wyraźnie zaznaczyć, że cały ten kod w plikach *.phps pokazuję wam po to, abyście mogli sobie samemu zrobić generowanie obrazka. Trzeba ściągnąć samemu font *.ttf, podłożyć własny background, dobrać odpowiednio parametry etc...

No i trzeba wyważyć pomiędzy czytelnością obrazka a jego podatnością na OCR. Forum phpBB przy obrazku daje taki text: Jeżeli nie możesz odczytać kodu skotaktuj się z administratorem - to powinno rozwiązać problemy ludzi słabowidzących.

Acha, oczywiście zamiast $_GET['txt'] trzeba użyć $_SESSION['txt'] albo czegoś podobnego, bo podanie spamerom na tacy <img src="captcha.php?txt=alamakota"> jest trochę niepoważne...


captcha po lewej (4DVMB) jest łamana jako 4OYMB
Data utworzenia : 2007-02-05, data aktualizacji :2012-03-10

Skomentuj ten tekst

Komentarze:

Adrian
2012-08-13 08:15:29
do Lazowik
Jak możesz nazwać captchą tekst, który należy przekleić. Wiesz po co captcha jest i czemu jest obrazkiem z powykrzywianymi literami różnych czcionek, kreskami i plamami?
Nie po to, żeby utrudnić życie użytkownikowi, ale po to, żeby skrypty, które dodają komentarze automatycznie miały problem z przepisaniem captcha. W Twoim przykładzie wystarczy pobrać treść strony (jedna linia kodu) i wyodrębnić tekst, a następnie go przekleić...
lazowik
2012-04-26 23:05:34
Przykład
To się nazywa captcha: http://men.gov.pl/index.php?option=com_wrapper&view=wrapper&Itemid=365
Odpowiedź Lemata:
skoro im działa to po co przepłacać?
lolek
2011-10-06 21:14:06
jest jeszcze inne rozwiązanie
na stronie http://zagrosze.com/weryfikacja/ znalazłem takie banalne rozwiązanie - używam i działa ...
Odpowiedź Lemata:
yhy, tylko załączasz do swojej strony kod pochodzący z innego serwera, co niesie ze sobą problemy bezpieczeństwa.
Robik
2011-05-10 18:07:51
kolory...
hmmm, widzę mały problem... dosłownie i w przenośni,
jestem daltonistą, twoje rozwiązanie oznacza dla mnie kłopot.
Odpowiedź Lemata:
faktycznie coś słabo widzisz: "Jeżeli nie możesz odczytać kodu skotaktuj się z administratorem - to powinno rozwiązać problemy ludzi słabowidzących."
iks
2010-04-08 16:31:40
.
@BART tez wlasnie o czyms takim myslalem i zeby zaimplementowac to we flashu. Niestety brak czasu i slaba znajomosc flash mi nie pozwalaja. Ciekawi mnie jednak czy to by zalatwilo spamerow
Odpowiedź Lemata:
o! flesz to jest myśl
wszystkie opinie »
Protected by spf
[Nospam-PL.NET]
Seti@Home
www.php.net
© Lemat 2004 - ∞