Ne avrete sicuramente sentito parlare, CAPTCHA è un sistema che permette di capire se un utente è umano o un semplice bot.
Visto il proliferare di bot gestiti da spammers, è sempre più facile trovare all’atto della registrazione o dell’immissione di un commento su un sito (come potete notare anche qui su trackback, poco sotto questo articolo) una piccola immagine rettangolare contenente un testo che bisognerà scrivere in uno spazio apposito prima di inviare una richiesta al sito stesso.
Bene, oggi voglio cercare di spiegare a chi ha un minimo di familiarità col linguaggio PHP, come procedere per la realizzazione di uno script in grado di generare un’immagine con un testo casuale, in modo da creare un modulo a prova di lettura automatica 😉
Iniziamo col primo passo:
1.
< ?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
2.
$img = imagecreatetruecolor($x,$y);
Usiamo la funzione imagecreatetruecolor() per creare il riquadro con 256 toni di rosso, verde e blu (da 0 a 255).
3.
$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.
4.
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
5.
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.
6.
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);
?>
E’ finito così il nostro tutorial, ora per vedere il risultato finale non ci resta che inserire lo script in un file che magari chiamiamo captcha.php, fare l’upload di quest’ultimo sul nostro spazio web e richiamarlo inserendo nella barra indirizzi del browser http://www.miosito.it/captcha.php?code=trackback ottenendo il risultato seguente
Ed ecco il nostro script captcha che potremo modificare e personalizzare a nostro piacimento.
I commenti sono chiusi.