Visualizzazione dei risultati da 1 a 6 su 6
  1. #1

    Guida realizzazione captcha

    Ciao a tutti ragazzi, sto cercando una guida passo passo per la creazione di una captcha...
    ...dopo aver letto un articolo su html.it ho le idee un po confuse, perchè non so verso che tipo di soluzione orientarmi, voi che consigliate di utilizzare, le sessioni, i cookie o uno script che interagisce con il database?

    In ogni caso mi date una mano? non so proprio da dove iniziare!

    Grazie


  2. #2

  3. #3
    Ti ringrazio per la risposta e per le utili segnalazioni... approfitto per chiederti secondo te un captcha senza sessioni o cookie, quindi che funzioni con l'ausilio di un database, puo essere piu efficace rispetto ad altre soluzioni?


  4. #4
    Puoi anche evitare il database se è per quello, e' sufficiente che nella form passi un valore che ti permetta di convalidare l'input (es. md5('stringa da testare' . 'secret hash')).

  5. #5
    ok, grazie, ora vedo di preparare qualcosa e integrare nel mio lavoro...

    senti, inizialmente ho provato a generare l'immagine con questo codice:
    Codice PHP:
    <?php
    header
    ("Content-type: image/png");

    $x 200;
    $y 75;
    $code substr($_GET['code'],0,9);
    $space $x / (strlen($code)+1);

    //Credo che questa prima parte sia abbastanza semplice da capire;
    //- Con la funzione header() indichiamo al browser che dovrà aspettarsi un’immagine di tipo png.
    //- Assegnamo i valori di larghezza e altezza del riquadro che andremo a produrre
    //- Facciamo in modo che il codice che vogliamo generare abbia una lunghezza massima di 9 caratteri
    //- Calcoliamo lo spazio che deve esserci tra un carattere e il successivo

    $img imagecreatetruecolor($x,$y);

    //Usiamo la funzione imagecreatetruecolor() per creare il riquadro con 256 toni di rosso, verde e blu (da 0 a 255).


    $bg imagecolorallocate($img,255,255,255);
    $border imagecolorallocate($img,0,0,0);
    $colors[] = imagecolorallocate($img,128,64,192);
    $colors[] = imagecolorallocate($img,192,64,128);
    $colors[] = imagecolorallocate($img,108,192,64);

    //Con questo, invece provvediamo a definire i colori dello sfondo (bianco), del bordo (nero) e un array di 3 colori che useremo per la renderizzazione del testo.


    imagefilledrectangle($img,1,1,$x-2,$y-2,$bg);
    imagerectangle($img,0,0,$x-1,$y-2,$border);

    //Tramite queste funzioni andiamo a definire il background e il bordo del riquadro rettangolare

    for ($i=0$i<strlen $code ); $i++)
    {
    $color $colors[$i count($colors)];
    imagettftext($img,28+rand(0,8),-20+rand(0,40),($i+0.3)*$space,50+rand(0,10),$color,'alba.ttf',$code{$i});
    }

    //Con questo ciclo provvediamo a scrivere il testo nel riquadro.
    //Ho usato il font alba.ttf ma si può usare qualsiasi font, l’importante è inserire il file nella stessa directory in cui inseriamo questo script.

    for($i=0;$i<400;$i++)
    {
    $x1 rand(3,$x-3);
    $y1 rand(3,$y-3);
    $x2 $x1-2-rand(0,8);
    $y2 $y1-2-rand(0,8);
    imageline($img,$x1,$y1,$x2,$y2,$colors[rand(0,count($colors)-1)]);
    }

    //Quest’altro ciclo for ci serve per disegnare 400 linee di coordinate casuali che serviranno a confondere le idee ai bot nel caso volessero cercare di decifrare la nostra scritta.

    //Infine non ci resta che chiamare la funzione imagepng() per visualizzare i dati dell’immagine nel browser

    imagepng($img);
    ?>
    Ma nonostante ho caricato piu volte il font online(nella stessa dir) e ho provato anche a sostituirlo con un altro... non riesco a vedere i caratteri, mi viene fuori solo il fondo, il bordo dell'immagine e le righine colorate, al posto dei caratteri invece mi vengono mostrati dei quadratini, come se il font fosse corrotto, o cmq non utilizzabile.

    Dove sbaglio?

  6. #6
    Con questo script puoi richiamare la pagina come se fosse una jpg
    Codice PHP:
    <?php
        
    /*Apro la sessione*/
        
    session_start();

        
    /*Creo una stringa ed estraggo da essa un valore casuale di 7 caratteri alfanumerici*/
        
    $stringa md5(microtime());
        
    $risultato substr($stringa07);

        
    /*Definisco l'immagine che verrà utilizzata come base per il captcha*/
        
    $img imagecreatefromjpeg("captcha.jpg");

        
    /*Definisco il colore del testo, in questo caso il bianco*/
        
    $testo imagecolorallocate($img000);

        
    /*Definisco le dimensioni e le distanze dai bordi del testo*/
        
    imagestring($img72020$risultato$testo);

        
    /*Memorizzo il codice in un cookie*/
        
    setcookie("codice"$risultatotime() + 3600);
        

        
    /*Modifico l'intestazione della pagina, in questo modo è possibile richiamarla come se fosse  un'immagine*/
        
    header("Content-type: image/jpeg");

        
    /*Visualizzo l'immagine*/
        
    imagejpeg($img);
    ?>

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.