info@nebulosaweb.com

Guida alla creazione di un captcha

captcha

Il captcha è uno degli attuali strumenti anti-spam più usato ed impedisce alla maggior parte dei bot di proseguire nell’invio di dati. Sebbene in rete esistano diversi servizi che offrono buoni captcha (es. reCAPTCHA) non sempre possono fare al caso nostro e non sempre sono efficaci al 100% essendo molto diffusi.
In questa guida vedremo come generarne uno mediante un file in PHP.

session_start();
header("Content-type: image/png");

$x = 80;
$y = 20;

$img = imagecreatetruecolor($x,$y);

La prima parte dello script è abbastanza semplice, con essa avviamo la sessione che ci servirà alla fine, impostiamo l’header col quale dichiariamo il tipo di file in output, definiamo larghezza e altezza e creiamo l’immagine di sfondo del captcha.

$bg = imagecolorallocate($img,255,255,255);
$border = imagecolorallocate($img,0,0,0);
$colorTxt = imagecolorallocate($img,63,63,63);
$colors[] = imagecolorallocate($img,142, 38, 38);
$colors[] = imagecolorallocate($img,9, 79, 46);
$colors[] = imagecolorallocate($img,22, 30, 91);

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

In questa parte di codice dichiariamo i colori per lo sfondo, il bordo, il testo e le linee casuali in formato rgb.
Questo esempio utilizza 3 colori per le linee casuali ma potete liberamente aggiungerne o toglierne per adattare il captcha alle vostre esigenze.

$testo = strtoupper(substr(md5(time()),0,5));
$_SESSION['captcha'] = $testo;

imagettftext($img,20,rand(-4,4),8,25,$colorTxt,'comicbd.ttf',$testo);
	 
for($i=0;$i<100;$i++){//genera le linee
	$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)]);
}
imagerectangle($img,0,0,$x-1,$y-1,$border);
	 
imagepng($img);

L’ultima parte dello script è quella che fa da motore, generando l’immagine col testo e salvando quest’ultimo in una variabile di sessione.
Il testo casuale è il frutto del timestamp criptato con l’algoritmo md5 dal quale nel nostro caso sono prelevati i primi 5 caratteri.
La dichiarazione della variabile di sessione ci è necessaria per poi fare il confronto col testo immesso dall’utente nella casellina di verifica.
Successivamente troviamo la funzione imagettftext() che genera il testo. Questa funzione si avvale di un font .ttf che deve essere salvato nella stessa cartella dello script.
In fine troviamo il ciclo for che genera le linee casuali (nell’esempio 100), la funzione che da un bordo al captcha e quella che fa si che venga restituita al browser un’immagine.

Qui di seguito potete vedere il captcha generato dallo script mostrato in questa guida.

captcha

Autore: Fabio Di Stasio

Web Designer Freelance specializzato in sviluppo web, realizzazione di template responsive, creazione di temi e plugin WordPress e purista degli standard W3C.