Tante sono le librerie e i metodi per creare i
CAPTCHA, tuttavia è bene citare sempre qualche nuova idea originale, soprattutto quando si tratta di mettersi al sicuro da spam, poiché l'originalità può essere un'arma vincente.
In un
articolo apparso su
Dev Shed vediamo come creare uno script che faccia al caso nostro. Useremo solo il linguaggio PHP, la libreria grafica
GD (inizialmente) e il database MySQL.
//start session which will be used to store generated numbers of validation in the form
session_start();
//generate random number between 10,000 and 99999
$number =mt_rand(10000, 99999);
//store generate random number to a session
$_SESSION['answer']=$number;
//create image 50 x 50 pixels
$imagecreate = imagecreate(50, 50);
// white background and blue text
$background = imagecolorallocate($imagecreate, 255, 255, 255);
$textcolor = imagecolorallocate($imagecreate, 0, 0, 255);
// write the string at the top left
imagestring($imagecreate, 5, 5, 10, $number, $textcolor);
// output the image
header("Content-type: image/png"); $image= imagepng($imagecreate);
Lo script di cui sopra, in ordine, genera un numero in modalità
random, lo memorizza nella sessione PHP
$_SESSION, crea una semplice immagine 50x50 pixel con testo blu e sfondo bianco con il numero generato. Per usarlo basta richiamare questo script come segue:
<br/>
<img src="captxt.php"/>
<br/>
Type the security code above:
<br/> <br/>
<input type="text" name="captcha" size="10">
Se invece vogliamo ottenere lo stesso scopo senza libreria grafica, ma con l'uso del database, a patto di aver creato manualmente le immagini, useremo lo script che segue.
In questo caso nella tabella
captcha ci sono tre colonne:
imagepath,
number e
answer. La prima colonna contiene le immagini memorizzate nel database mentre l'ultima contiene la stringa reale contenuta nelle immagini che vengono selezionate, in questo script, con un numero casuale da 1 a 20 legato alla seconda colonna. Prendiamo atto che questo non è il massimo che si può ottenere con i
CAPTCHA, ma è sicuramente una buona idea da sviluppare.