Costruire un caphcha

8 mar 2010

Utilizzare un capcha per bloccare l’invio di mail spam quando si crea un apagina con un form per l’invio delle mail è diventata un aprassi consolidata, il più utilizzato è sicuramante re-Chapcha, poi ci sono Kchapcha e Egglue Semantic CAPTCHA come valide proposte, ma se vuoi poter decidere nel dettaglio che aspetto grafico avrà il tuo campo per l’inserimento del codice la strada è quella di farne uno programmato ad hoc,  infatti servizi come re-Chapcha, anche se sono senz’ altro più completi ti permettono solo di caricare il template grafico che preferisci tra quelli a scelta, ed è difficile intervenire sulle dimensioni.

il codice che segue è tutto quello che serve, salvato su un file PHP che io ho chiamato chapcha.php

< ?php
//facciamo partire la sessione
session_start();

//creaiamo la stringa random e criptiamola
$crypt = sha1(microtime() * mktime());

//preleviamo una porzione della stringa
$str = substr($crypt,0,4);
//echo "$str"

//indichiamo il percorso all'immagine
$img = imagecreatefrompng("img/captcha.png");

//inseriamo degli elementi grafici all'interno del file
$color = imagecolorallocate($img, 239, 239, 239);
$linea = imagecolorallocate($img,239,239,239);
imageline($img,0,0,49,39,$linea);
imageline($img,40,0,64,29,$linea);

//scriviamo la stringa nell'immagine
imagestring($img, 5, 20, 10, $str, $color);

//salviamo la stringa in sessione
$_SESSION['control'] = sha1($str);

/*
//mostriamo a video l'immagine*/
header("Content-type: image/png");
imagepng($img);
? >

In sostanza si fa stampare con una funzione propria del PHP una stringa casuale di caratteri e numeri, la si trocca alla lunghezza scelta
e gli si assegna il colore che vogliamo. la stessa stringa se viene posta sopra ad un immagine con delle linee dello stesso colore in modo che resti intuibile all’ occhio umano, impedisce al lettori dei programmi di spam di capire il contenuto della stringa e di permettere allo spider di inserirla nel campo di controllo.

Poi basta inserire l’immagine e il campo dove si vuole nel form:

<img src="capcha.php" alt="capcha" />
<input type="text" name="stringa" id="stringa"  />

Per il tutto mi è stato utile http://www.danieletabacco.com/3/articolo/realizzare-un-codice-captcha.html
Nella mia pagina dei contatti un esempio.

Lascia un commento

Categorie

Archivio

Meta

Links Utili