Loading:

Książka Zend Framework 3. Poradnik Programisty.

Jak zrobić Token w PHP (captcha)

Skrypt tworzy 5 cyfrowy token z liczb 23456789 bez 0 i 1 ponieważ przypominają one O i l wiec pozbyliśmy się ich.

Wymiary tokena określiliśmy w zmiennych:
$img_width = 100;
$img_height = 16;

Aby wyświetlić token w wyznaczonym miejscu wystarczy kod:

<img src="token.php" alt="token" style="vertical-align: middle" />

Jako scieżke do obrazka poprostu podajemy adres do kodu token.php



Całość przedstawiona jest na lisingu poniżej.




Napisz Artykuł

Listing


// KOD PLIKU token.php
<?    
    session_start();
    $pool = '23456789'; //liczby z których bedziemy losować token
    $img_width = 100; //wymiary tokena
    $img_height = 16;

    $str = ''; //wyzerowanie tokena
    for ($i = 0; $i < 5; $i++){ // losowanie liczb
        $str .= substr($pool, mt_rand(0, strlen($pool) -1), 1);
    }

    $string = $str;
    $_SESSION['captcha'] = $string; //tworzymy sesje z wartością tokena

    $im = imagecreate($img_width, $img_height); //tworzymy obrazek

    $bg_color     = imagecolorallocate($im,255,255,255); // kolor tła
    $font_color   = imagecolorallocate($im,0,0,0); // kolor czcionki
    $grid_color   = imagecolorallocate($im,246,246,246); // kolor lini
    $border_color = imagecolorallocate ($im, 246, 246, 246); // kolor ramki

    // Tworzenie tokena
       
        imagefill($im,1,1,$bg_color);

   
         ImageLine($im,90,0,90,30,$grid_color); //1
         ImageLine($im,10,0,10,30,$grid_color); //2
         ImageLine($im,20,0,20,30,$grid_color); //1
         ImageLine($im,30,0,30,30,$grid_color); //1
         ImageLine($im,40,0,40,30,$grid_color); //1
         ImageLine($im,50,0,50,30,$grid_color); //1
         ImageLine($im,60,0,60,30,$grid_color); //1
         ImageLine($im,70,0,70,30,$grid_color); //1
         ImageLine($im,80,0,80,30,$grid_color); //1
         
         ImageLine($im,0,5,100,5,$grid_color); //1
         ImageLine($im,0,10,100,10,$grid_color); //1
         ImageLine($im,0,15,100,15,$grid_color); //1


    $x = rand(5, $img_width/(7/2)); // pozycja liczb w tokenie

    imagerectangle($im, 0, 0, $img_width-1, $img_height-1, $border_color);

    for($a=0; $a < 7; $a++){

        imagestring($im, 3, $x, 1, substr($string, $a, 1), $font_color);
        $x += (5*2); #odstęp

    }

    header("Content-type: image/gif");
    imagegif($im);
    imagedestroy($im);

?>
 


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=1587

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: igor
Ranga: Administrator serwisu Punktów: 28716
Komentarze użytkowników
Strasznie słaby token, pierwszy lepszy spmaer żlamie taką standordową czcionkę OCrem
autor: R4D3K | 369 | 2009-07-20 17:08:38


Ten token używam na stronie gdzie było mnustwo botów spamujących i zatrzymuje 100% jedynie ktoś kto specjalnie uprze sie na twoją strone poradzi sobie z tym tokenem, ale standardowo to najlepsze rozwiązania gdzie użytkownik nie ma problemu z odczytaniem go poza tym jest łatwy do konfiguracji i można go łatwo zmianić na trudniejszy. Dodatkowo do tokena polecam sprawdzanie skąd idą dane post czy get.
autor: Igor | 370 | 2009-07-20 21:04:27


Fajny token, ale mam mały problem, włożyłem go do formularza jednak czy wpisze się dobrze czy źle, i tak wysyła maila i nie wyskakuje mi żaden komunikat, co mogłem źle zrobić? :) Z góry dzięki za rady
autor: początkujący | 420 | 2009-08-18 22:01:53


musisz porównać to co wpisał użytkownik z tym co jest w $_SESSION['captcha'] jeśli to samo to wysyłasz jeśli nie to dajesz ze zły token
autor: Igor | 421 | 2009-08-19 11:42:03


tez mam podobny problem pokazal mi sie token przy przycisku wyslij ale nie moge nigdzie wpisac tego tokena.
autor: graftec | 12748 | 2012-02-15 22:04:36


Panie adminie... ja już próbowałem na wszystkie sposoby i sprawa wygląda tak że obojętnie co wpiszę w tokena to i tak i tak wysyła... inaczej sprawa wygląda jak nic nie wpisze wtedy nie a jak coś obojętnie co wpiszę to wysyła...
autor: matius | 12847 | 2012-08-02 20:09:24


    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors