Verifica antispam CAPTCHA con PHP, tutorial

In questo tutorial parliamo del CAPTCHA ed illustreremo come implementarlo in pochi passaggi con PHP.
Il CAPTCHA è ad oggi il metodo più utilizzato nei form per distinguere umani da bot e si tratta di un’immagine con testo generato dinamicamente su sfondo distorto o comunque di difficile lettura che quindi non può essere decifrato facilmente da un algoritmo.

Vediamo come realizzarlo in pochi minuti.

ESEMPIO CAPTCHA

Innanzitutto aprite un editor grafico e disegnate lo sfondo caotico su cui verrà applicato il testo da leggere scegliendo bene i colori ed evitando troppi contrasti.
Fatto questo, passiamo al codice PHP.

<?php
session_start();
header(“Content-type: image/png”);
$captchaImage = imagecreatefrompng(“captcha.png”) or die(“Cannot Initialize new GD image stream”);
$captchaFont = imageloadfont(“font.gdf”);
$captchaText = substr(md5(uniqid(”)),-9,9);

Apriamo una sessione e come prima cosa settiamo come header della pagina il tipo di file image/png (essendo in questo caso l’immagine di tipo PNG), così che l’output della pagina venga considerato come file grafico (nel form comparirà proprio il risultato di questa pagina), quindi creiamo un oggetto immagine tramite la funzione imagecreatefrompng.
Se l’oggetto immagine viene creato correttamente, creiamo un oggetto per il font caricato: il font deve essere di formato GD altrimenti non viene generato dalla macchina su cui gira PHP.
Trovate una raccolta di GDF a questa pagina ma se avete esigenze particolari potete crearvene uno dal vostro TTF preferito con questo programma per Windows, scaricabile qui.
L’operazione successiva consiste nel creare dinamicamente il testo che l’utente umano dovrà inserire per la verifica: con uniqid creiamo un id dell’utente calcolato secondo il tempo in quel preciso istante, ne calcoliamo l’hash MD5 e poi con substring associamo alla variabile $captchaText una porzione della stringa composta dagli ultimi nove caratteri.

$_SESSION['session_captchaText'] = $captchaText;
$captchaColor = imagecolorallocate($captchaImage,200,200,200);
imagestring($captchaImage,$captchaFont,15,5,$captchaText,$captchaColor);
imagepng($captchaImage);
imagedestroy($captchaImage);
?>

Settiamo una variabile di sessione dove conserviamo il testo da inserire e poi creiamo l’oggetto $captchaColor che contiene le informazioni sul colore del testo (R,G e B, con valori da 0 a 255), sceglietelo visibile ma non troppo contrastante con lo sfondo.
Con la funzione imagestring disegniamo il testo sul PNG passando come parametri l’oggetto immagine, il font, le coordinate X e Y, il testo e il suo colore.
Ora, con imagepng, diamo l’output dell’immagine definitiva: volendo potete usare anche imagegif, imagejpeg etc, se volete cambiare formato all’immagine.
Come ultima cosa liberiamo la memoria del server distruggendo l’oggetto dell’immagine che non serve più.

Il codice CAPTCHA.PHP per intero:

<?
session_start();
header(“Content-type: image/png”);
$captchaImage = imagecreatefrompng(“captcha.png”) or die(“Cannot Initialize new GD image stream”);
$captchaFont = imageloadfont(“font.gdf”);
$captchaText = substr(md5(uniqid(”)),-9,9);
$_SESSION['session_captchaText'] = $captchaText;
$captchaColor = imagecolorallocate($captchaImage,200,200,200);
imagestring($captchaImage,$captchaFont,15,5,$captchaText,$captchaColor);
imagepng($captchaImage);
imagedestroy($captchaImage);
?>

Nella pagina che conterrà il form dovremo eseguire semplici operazioni, subito prima del codice HTML:

<?php
session_start();

if($_POST)
{
if($_POST['txt_captcha']!=”")
{
//echo($_POST['txt_captcha'].”<br />”);
//echo($_SESSION['session_captchaText']);

if($_POST['txt_captcha']==$_SESSION['session_captchaText'])
{
echo(“Sei umano”);
}
else
{
echo(“Sei un bot”);
}

}
}
?>

Apriamo la sessione, verifichiamo di essere in fase di POST, che la variabile passata per POST del campo di testo con nome txt_captcha contenga del testo e per finire che questo testo sia lo stesso della variabile di sessione session_captchaText del codice di CAPTCHA, in caso contrario l’utente è un bot e i dati del form non verranno inviati.
Nella pagina inseriamo la stringa:

<p><img src=”captcha.php” alt=”" name=”captcha” width=”233″ height=”49″ id=”captcha” /></p>

Il risultato di questa pagina è infatti l’immagine creata dal codice.

SCARICA IL CODICE SORGENTE

Ritieni questo post utile o interessante?
Condividi e Segnala

, , , , ,

Contenuto simile:

  • Verifica antispam CAPTCHA con PHP, tutorial
    Tutorial Photoshop

    Nella sezione risorse on line non poteva mancare una bella lista di siti pieni di tutorial Photoshop per imparare ogni trucco di questo meraviglioso programma di grafica pubblicitaria, fotoritocco e web design. Planet Photoshop Nella categoria tutorial di questo sito trovate una vasta collezione di videotutorial...

  • Flash AS3, parametri con swfobject
    Passare valori e parametri a Flash in AS3 con SWFObject

    Credo che pochi non abbiano mai avuto bisogno di passare parametri dalla pagina agli SWF precompilati, comunque scrivo questo tutorial per chi ancora non l'ha fatto (o sta avendo problemi nel farlo) col codice Actionscript 3.0. L'esempio a seguire fa uso della libreria Javascript SWFObject (ex Flashobject costretto a...

  • Cornici con Photoshop
    Cornici con Photoshop in 5 minuti

    Si dice che le foto più belle sarebbero da incorniciare..e allora facciamolo in pochi passi con questo tutorial per Photoshop, creando cornici assolutamente originali, poichè prelevate dalla foto stessa. In questo tutorial impareremo anche la base della definizione di un pattern, elemento troppo spesso trascurato...

  • Verifica antispam CAPTCHA con PHP, tutorial
    PNG trasparenti anche con Internet Explorer 6

    ::: NOTA BENE :::Il metodo a seguire è stato migliorato e spiegato nella pagina PNG TRASPARENTI SU IE6: LA SOLUZIONE DEFINITIVA, soluzione funzionante anche nel caso di PNG usate come sfondi CSS. :::::::::::::::::::: La più grande noia per un webdesigner che ricorrre al CSS per disegnare i propri layout è la...

  • Verifica antispam CAPTCHA con PHP, tutorial
    Cornici originali in Photoshop in pochi secondi

    Oggi vi svelo un trucco per ottenere cornici originali e di effetto con Photoshop in pochi secondi. Con questo breve tutorial Photoshop imparerete anche ad usare la modalità Quick Mask (maschera veloce) e alcuni filtri Pixelate. Partiamo dando le dimensioni della cornice che vogliamo ottenere creando una...

Feed dei commenti dei commenti - lascia un commento - trackback

3 commenti per “Verifica antispam CAPTCHA con PHP, tutorial”

  1. Roc

    :P Grazie.. molto interessante.. =)

  2. luca

    Ciao

    Sto tentando di fare una form mail con captcha ma non capisco come mai perchè tutto funzioni tranne il fatto che non riesco a visualizzare i captcha. Eppure carico tutto quanto sulla cartella e lo metto nel server.

  3. nome

    Beh tutto sommato comodo

Rispondi al post