Ti trovi su Risorse Webmaster > PHP: Captcha in PHP: Filtrare lo spam nei moduli e form. Ecco come realizzarlo

PHP: Captcha in PHP: Filtrare lo spam nei moduli e form. Ecco come realizzarlo




- articolo pubblicato su Yappy.it -

Il codice che vedremo permette di creare una sorta di password a guardia dei form per l'invio di messaggi o di login degli utenti.

L'obiettivo è che spider o sistemi automatici siano impossibilitati ad utilizzare un sito per i loro scopi mentre l'utente può accedere al sito o utilizzare il form solo leggendo il codice inserito nell'immagine e dopo averlo inserito nella casella.

Vediamo come procedere:

  1. creare un codice che l'utente deve digitare in una casella;
  2. creare un'immagine con quel codice inserito all'interno;
  3. controllare se il codice digitato è uguale a quello inserito nell'immagine;

Il trucco sta proprio nel fatto che un programma automatico non è in grado di riconoscere le forme in un'immagine come quella mostrata di seguito.

Creiamo il file modulo.php

<form method="post" action="login.php">
   <input type="text" name="utente" value="utente" size="12" onfocus="this.value=''"> utente<br>
   <input type="password" name="password" value="password" size="12" onfocus="this.value=''"> password<br>

<img src="genera_codice.php" width="100" height="30">

   <input type="codice" name="codice" value="" size="12" onfocus="this.value=''"> codice<br>

   <input type="submit" name="login" value="login" class="bottone">
</form>

Ora vediamo il codice genera_codice.php che permette di creare l'immagine on the fly (per chi non conosce bene l'inglese è proprio il nostro creare un'immagine al volo)

<?
    $numero = 6;
    // numero caratteri da usare per il codice

    $data = date("Y-m-d H:i:s");
    $codice = substr(md5($data),10,$numero);
    // ho generato un codice casuale legato all'orario
    $_SESSION['codice'] = $codice;
    // lo memorizzo per  poterlo poi controllare

    // controllo se la libreria è attiva
    if (!function_exists('gd_info')) print "Occorre attivare la libreria grafica";
    else {
        header("Content-type: image/png");
        $percorso = "tuo_percorso_immagine_base";
        $image = ImageCreatefromJPEG($percorso);
        $green = imagecolorallocate($image,51,104,51);
        ImageString($image, 5, 35, 12, $codice, $green);
        Imagepng($image);
        ImageDestroy($image);
    }

?>< p="" />

Da notare come i due elementi:

  1. header("Content-type: image/png");
  2. Imagepng($image);

permettono al file genera_codice.php di essere interpretato del browser come un'immagine.

Attenzione: perchè il codice funzioni occorre che sia attiva la libreria grafica.
Per attivarla è necessario aprire il file php.ini e togliere il punto e virgola davanti alla riga: extension=php_gd2.dll
Salvare quindi il file php.ini così modificato e ri-avviare il webserver Apache.

Abbiamo inoltre evitato altre librerie per la gestione dei testi come quella che usa i postscript o quella che usa i true type font.
Se cercate informazioni a riguardo le potete trovare sul sito www.php.net

La parte successiva del codice riguarda il controllo all'interno del file login.php:

<?

    // se il valore nella sessione non è uguale al valore digitato
    // l'utente è re-inviato al modulo per un nuovo inserimento

    if ($_SESSION['codice']!=$_REQUEST['codice']) {
         header("location: modulo.php");
         exit:
    }

    // qui di seguito metti il tuo codice per il controllo dei dati inseriti dall'utente
    // ...

?>

Scarica il codice completo per generare l'immagine

 
© Computer Flash | |