Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> CAPTCHA class pre relase
kkrzyzak
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.01.2007

Ostrzeżenie: (0%)
-----


Witam. Ostatnio zainteresowało mnie to, co kiedyś uważałem za największe zło- Captha. Uważałem tak, głównie ze względu na dostępność- jednak opróćz tego standardowe capthy są często dość proste do złamania- potwierdza to min. ta strona z tego też powodu postanowiłem się wziąć za swój wynalazek, który będzie troszkę odmienny od innych prezentowanych Capth.
Czym zatem różni się moja Captha od innych?
Tutaj nie trzeba przepisać jakiegoś konkretnego słowa- należy natomiast podać ilość symboli- w chwili obecnej są to bardzo tandetne kółka- docelowo zastanawiam się nad jakimiś zwierzątkami bądź znaczkami.
Jest to baaardzo wczesna wersja- na chwilę obecną nie nadaje się jeszcze do zastosowania jako captha w jakimkolwiek serwisie, jednak cały czas nad nią pracuję.
TODO:
-większa elastyczność (póki co tylko wielość CAPTHy jest w miarę edytowalna, natomiast kolorystyka itp- nie bardzo) -jednak to z tego powodu, że: captha będzie korzystała z kilku różnych teł, a kolorystyka kółek i tak chyba zostanie wymieniona.
-zrobienie pytania w stylu "ile jest żółtych kółek na obrazku" - tu jednak muszę dobrać takie kolory, by daltoniści nie mieli problemów (o ile takie kolory istnieją....)
-implementacja jakichś obrazków zamiast figur geometrycznych (muszę jednak znaleźć coś małego i łatwo rozpoznawalnego)
-poprawienie buga - w chwili obecnej obrazki są tworzone w temp`ie a nie są usuwane- po paru testach muszę ręcznie usuwać stare obrazki (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Kod Klasy:
  1. <?php
  2. class Kaptha{
  3. private $width='300';
  4. private $height='100';
  5.  
  6.  
  7. function showCaptha(){
  8. $img = @imagecreatetruecolor($this->width, $this->height);
  9. if(!$img){
  10. throw new exception('Cannot create image');
  11. }
  12. return $this->drawElipse($img);
  13. }
  14.  
  15.  
  16. function drawElipse($img){
  17.  
  18. $col_ellipse = imagecolorallocate($img, 255, 255, 255);
  19. $col_rectangle = imagecolorallocate($img, 50, 55, 50);
  20.  
  21. $elipses=rand(0,7);
  22. $correctResult=10-$elipses;
  23.  
  24. for($elipses;$elipses<10;$elipses++){
  25. $horizonPos+=rand(15,20);
  26. imageellipse($img, $horizonPos, rand(15,80), 10, 10, $col_ellipse);
  27. }
  28.  
  29. // for($i=rand(5,8);$i<10;$i++){
  30. // imagerectangle($img,rand(10,90),rand(10,100),rand(20,190),rand(80,160),$col_rectangle);
  31. // }
  32.  
  33. $imgname=base64_encode('captha').rand(0,999);
  34. imagepng($img,'temp/'.$imgname.'.png');
  35. $_SESSION['CapthaCorrectResult']=$correctResult;
  36. return 'temp/'.$imgname.'.png';
  37. // imagedestroy($img);
  38.  
  39. }
  40.  
  41. }
  42. ?>

użycie:
  1. <?php
  2. include('captha.class.php');
  3. $captha = new Kaptha;
  4. echo '<img src="'.$captha->showCaptha().'" />';
  5. print_r($_SESSION);
  6. ?>

dla osób niecierpliwych- screen działania (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
(IMG:http://img214.imageshack.us/img214/3096/captha5hl.th.jpg)

Jak już mówiłem, klasa jest na bardzo wczesnym stopniu rozwoju. Prosiłbym jednak o wszelkie sugestie dotyczące implementacji- klasa będzie na GPL`u, i chciałbym, aby przydała się komukolwiek (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
---------------------------UPDATE-----------------------------
ok, zamiast kółek są uśmiechnięte buźki i dla utrudnienia smutne- wiem, troszkę captha dla debili, ale narazie takie obrazki znalazłem, które sa łatwo rozpoznawalne (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
w chwili obecnej największym problemem jest to, że zdarza się, że ikony nachodzą na siebie- postaram się to naprawić w najbliższym czasie. Dodałem też podgląd aktualnego postępu prac

Ten post edytował kkrzyzak 21.01.2007, 15:29:55
Go to the top of the page
+Quote Post
ano
post
Post #2





Grupa: Zarejestrowani
Postów: 435
Pomógł: 40
Dołączył: 16.02.2003
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Nie patrzyłem w kod (nie znam się raczej na php ;-) ) ale mam kilka rad:
1. Stosuj większe rysunki buźek/kółek czy czegoś innego.
2. Nie dawaj tak dużo tych rysunków, max. 6 (nikomu nie chce się liczyć 31789 małych buźek wielkości 5 x 5px! ;D)
3. Mam pomysł jakbyś mógł rozwiązać problem nakładania się tych symboli:
Kod
--O-O-
-O----
---O-O

O oznacza symbol, - oznacza pustą przerwę pomiędzy symbolami,
Rozumiesz mniej więcej o co chodzi?
a ) pierwszy rysunek w odległości 2 od lewego boku, losowanie wysokości na której ma być obrazek
b ) drugi obrazek w odległości 5 od lewego boku (promień obrazków to np. 2) i także losowanie położenia wzg. osi Y dla tego obrazka
itd..

Ten post edytował ano 21.01.2007, 16:49:52
Go to the top of the page
+Quote Post
kkrzyzak
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.01.2007

Ostrzeżenie: (0%)
-----


Cytat
Nie patrzyłem w kod (nie znam się raczej na php ;-) ) ale mam kilka rad:

i właśnie takie rady są dla mnie najcenniejsze (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Cytat
1. Stosuj większe rysunki buźek/kółek czy czegoś innego.
najpierw muszę ostatecznie ustalić, co ja będę rysował, a potem dopiero dopasuję rozmiar- jednak wielkość napewno zmienię.
Ad.2 - w tej chwili jest wadliwa implementacja (docelowo ma być 10 obrazków w sumie,a teraz jest max 10 poprawnych obrazków- choć to będzie do edytowania )
Ad3. Bardzo dobry pomysł- zaraz postaram się go wprowadzić w życie.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


Matko, zdecyduj sie na jedna pisownie CAPTCHA'y. Poprawiam tytul topiku.
Go to the top of the page
+Quote Post
ShaXbee
post
Post #5





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 19.10.2004
Skąd: Opole

Ostrzeżenie: (0%)
-----


Skoro już rozmawiamy o Captcha polecam stronę http://sam.zoy.org/pwntcha/ która pokazuje które algorytmy captcha są już nieskuteczne. Obawiam się że Twój algorytm nie będzie specjalnie wymagający dla automatu...
Go to the top of the page
+Quote Post
kkrzyzak
post
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.01.2007

Ostrzeżenie: (0%)
-----


...gdyby Ci się chciało przeczytać mojego posta, zobaczyłbyś, że podawałem tamtą stronę. A uwierz mi, że (chyba) nie istnieje automat, który będzie w stanie odróżnić mrówki od żyrafy (bo tego typu pytania będą w wersji finalnej) (ba, na podanej przez Ciebie stronie tego typu captha jest oznaczona jako "An excellent idea, but a critically buggy implementation." ) -niestety, jestem w stanie rozwijać ją tylko w weekendy, więc narazie wiele nie zrobię...
Go to the top of the page
+Quote Post
DjKermit
post
Post #7





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 18.06.2005

Ostrzeżenie: (0%)
-----


Twoja klasa podsunęła mi pewien pomysł, który mógłbyś w niej zaimplementować:
zamiast buziek żyraw itp mógłbyś rysować figury geometryczne w różnych kolorach i zadawać pytanie typu "ile jest czerwonych kółek?" rozwiązało by to kilka problemów np. pisownia (żyrafa, rzyrafa, zyrafa) nie wspominająć o tym że ktoś może pomylić konia z zebrą lub jabłko z pomidorem i odwrotnie.

Ten post edytował DjKermit 23.01.2007, 18:57:10
Go to the top of the page
+Quote Post
kkrzyzak
post
Post #8





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.01.2007

Ostrzeżenie: (0%)
-----


maaan, ludzie, czytajcie całe posty....
Cytat
-zrobienie pytania w stylu "ile jest żółtych kółek na obrazku" - tu jednak muszę dobrać takie kolory, by daltoniści nie mieli problemów (o ile takie kolory istnieją....)
Go to the top of the page
+Quote Post
DjKermit
post
Post #9





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 18.06.2005

Ostrzeżenie: (0%)
-----


Cytat(kkrzyzak @ 23.01.2007, 19:31:08 ) *
maaan, ludzie, czytajcie całe posty....

Sorki.
Widocznie był za długi (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)


Cytat(kkrzyzak @ 21.01.2007, 13:24:55 ) *
docelowo zastanawiam się nad jakimiś zwierzątkami bądź znaczkami.

Poza tym to rzuciło mi się w oczy.
Go to the top of the page
+Quote Post
doseo
post
Post #10





Grupa: Zarejestrowani
Postów: 28
Pomógł: 3
Dołączył: 23.01.2007
Skąd: Dys/Lublin

Ostrzeżenie: (0%)
-----


Obrazek tego typu jest w miarę prosty do złamania bo wystarczy napisać algorytm wyznaczający odpowiednie obiekty* w obrazku

Algorytm mógłby wyglądać tak:

1. Utworzyć macierz M z obrazka.
2. Znaleźć biały pixel
Jeśli istnieje to Utworzyć nowy obiekt O[i++]* i dodać do niego ten pixel (współrzędne) i ustawić go na stos.
jeśli nie to przejść do kroku 4.
3. Pobrać ze stosu element . Dodać do obiektu. Usunąć go z macierzy M. Dodawać do stosu sąsiednie pixele, jeśli są białe.
Powtarzać krok 3 dopóki są elementy na stosie.
Jeśli nie elementów na stosie to wrócić do kroku 2.
4. Policzyć ilość obiektów O.

Jeśli trzeba by było policzyć żabki na obrazku który zawiera też samochodziki to w kroku 4 trzeba by było zrobić porównywanie z wzorcami.

* obiekt nie w znaczeniu informatycznym, może to być tablica np. $O[$i][$x][$y] = true; $x i $y to współrzędne pixela.
Go to the top of the page
+Quote Post
kkrzyzak
post
Post #11





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 21.01.2007

Ostrzeżenie: (0%)
-----


hmm... i to mi daje do myślenia. a co myślisz o rysowaniu żyrafy, nosorożca itp i prawidłową opcją byłaby nazwa zwierzątka? tu jednak problem jest z dysortografami....
Go to the top of the page
+Quote Post
mokry
post
Post #12





Grupa: Zarejestrowani
Postów: 374
Pomógł: 23
Dołączył: 3.06.2006
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Nie wiem, może takie coś już jest, ale normalne captcha, ale należy podać wartość od tyłu?

czyli na captcha jest: 5jk435
a trzeba podac: 534kj5
Go to the top of the page
+Quote Post
Ociu
post
Post #13





Grupa: Moderatorzy
Postów: 1 566
Pomógł: 37
Dołączył: 14.05.2003
Skąd: Kraków




Skrypt nawet fajny. Kedyś, kiedyś na blogu wassago była dość fajna dyskusja na temat zabezpieczeń formularzy przeciwko robotom. Była matematyka, były rysuneczki, było wpisanie jakieś literki w input, ale kolega chmolu podsunął dośc fajny pomysł.
Otóż wiadomo, że roboty uzupełniają wsyzstkie inputy, nawet hidden, wystarczy stworzyć jeden hidden i sprawdzać czy jset pusty, czy nie.
Go to the top of the page
+Quote Post
seaquest
post
Post #14





Grupa: Przyjaciele php.pl
Postów: 790
Pomógł: 7
Dołączył: 6.02.2003
Skąd: Polska

Ostrzeżenie: (0%)
-----


Lepiej ukryć pole cssem albo użyć JS do wysyłania formularza.

Ani jednego ani drugiego roboty nie potrafią czytać i interpretować.
Go to the top of the page
+Quote Post
devnul
post
Post #15





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

Ostrzeżenie: (0%)
-----


ukryte pola można w konfiguracji bota wyeliminowac, a co do tematu to lipa - jesli kułek 9buziek, żyraf czy co tam dasz) będize kilka to robot ez trudu podstawiając ciągle jakieś liczby trafi na tą właściwą - nawet bez interpretacji samego obrazka. przewaga przepisania ciągu znaków jet taka że wymaga poprawności ałęgo ciągu - a u ciebie wystarczyłoby podac cyferke - więc kombinacji jest duuużo mniej. co za tym idzie - banalnie proste do złamania - bo najmniej czasu zabiera wysłanie danych ze spamem a najwiecej interpretacja obrazka. dobrym pomysłem jest nazywanie zwierząt czy przedmiotów (zniekształconych jakimś efektem) - robot nie da sobie rady - szczególnie przy duzej ilości obrazków - a człowiek w razie w moze zarządać przerysowania obrazka (z np nowym efektem zniekształcenia, który być może będize bardziej czytelny dla człowieka). Pozatym - capache mozna dawać jako tło - z tym zaden automat bez recznej konfiguracji sobie nie poradzi - szczególnie jesli obrazek bedzie zdefiniowany w osobnym pliku.
Go to the top of the page
+Quote Post
bugme
post
Post #16





Grupa: Zablokowani
Postów: 16
Pomógł: 1
Dołączył: 12.09.2006

Ostrzeżenie: (0%)
-----


Nie ma sensu tego w ogóle robić, gdy dostępny jest skuteczniejszy, automatyczny filtr: http://sblam.com/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 13:55