Redazione
a- a+

Captcha con ASP.NET

Vediamo come funziona il controllo Captcha, esempi e codice.

Per evitare fastidiosi problemi di spamming con i moduli form mail o con i guestbook, è utile adottare degli accorgimenti. Tra questi il più comune è il controllo CAPTCHA.

Ma cosa è un codice CAPTCHA? Secondo Wikipedia «con l’acronimo inglese CAPTCHA si denota nell’ambito dell’informatica un test fatto di una o più domande e risposte per determinare se l’utente sia un umano (e non un computer o, più precisamente, un bot). L’acronimo deriva dall’inglese “completely automated public Turing test to tell computers and humans apart”. Un codice CAPTCHA tipicamente utilizzato è quello in cui si richiede all’utente di scrivere quali siano le lettere o numeri presenti in una sequenza di lettere o numeri che appaiono distorti o offuscati sullo schermo».

Supponiamo di avere il seguente form-mail:

<form id="mailform" action="contatti.aspx" method="post"> 

Nome e Cognome<input id="name" type="text" name="name" value="" /> <br/>
e-mail <input id="mail" name="mail" type="text" value="" /> <br/>
Informazioni:<br/>
<textarea id="info" name="info"></textarea><br/> 
Codice di verifica <img src="validazione.aspx" alt="codice di verifica" /> 
<input id="codeCAPTCHA" name=" codeCAPTCHA " type="text" maxlength="5" value="" /> 
<input type="submit" value="Invia" /> 

</form>

In cui un visitatore, inserendo nome, cognome e email, può richiedere delle informazioni. Prima di spedire il messaggio bisogna inserire anche il codice di validazione (codice CAPTCHA).

Nel nostro esempio il CAPTCHA è composto da un’immagine che viene generata dinamicamente dal codice che vedremo fra poco, e un campo testo nel quale l’utente andrà ad inserire i numeri che vede nell’immagine per poter confermare la propria volontà di inviare il messaggio.

Il codice ASP.NET sarà il seguente, da inserire nell’evento Page_Load della pagina:

//creo una nuova immagine 90*60 (codice CAPTCHA) 
System.Drawing.Image imageCaptcha = new System.Drawing.Bitmap(90, 60); 
Graphics g = Graphics.FromImage(imageCaptcha); 
StringBuilder testo = new StringBuilder(); 
Random rnd = new Random();
 
//creo l’immagine come un rettangolo con sfondo bianco 
Rectangle imgC = new Rectangle(0, 0, imageCaptcha.Width, imageCaptcha.Height); 
g.FillRectangle(new SolidBrush(Color.White), imgC); 
  
//inserisco delle linee random per creare un disturbo nell’immagine nello stile del 
//CAPTCHA
int x; 
for (int i = 0; i < rnd.Next(10, 100); i++) 
{ 
x = rnd.Next(0, imageCaptcha.Width); 
g.DrawLine(new Pen(Color.Black), x, 0, x, imageCaptcha.Height); // disegno le linee
} 

//scrivo nell’immagine 5 numeri casuali da 0 a 9 
x = 5; 
for (int i = 0; i < 5; i++) 
{ 
int y = rnd.Next(10, 50 - 30); 
int num = rnd.Next(9); 
testo.Append(num); 
Color colore = Color.Black; 
g.DrawString(num.ToString(), new Font("Verdana", 12, FontStyle.Bold), new SolidBrush(colore), x, y); 
x += 20; 
}   

//L’output è di tipo jpeg 
Response.ContentType = "image/jpg"; 
// creo un cookie denominato codCAPTCHA
HttpCookie tmp = new HttpCookie("codCAPTCHA", builder.ToString()); 
cookie.Expires = DateTime.Now.AddMinutes(5); 
Response.SetCookie(tmp); 
imageCaptcha.Save(Response.OutputStream, imageCaptcha.Jpeg); 
imageCaptcha.Dispose();

La pagina contatti.aspx attivata al submit del form dovrà prima di tutto controllare che sia presente il cookie che abbiamo salvato

HttpCookie tmp = new HttpCookie("codCAPTCHA", builder.ToString()); 
cookie.Expires = DateTime.Now.AddMinutes(5); 
Response.SetCookie(tmp); 

e che il form inviato contenga effettivamente il codice che abbiamo visualizzato nell’immagine, ovvero bisognerà controllare che anche il valore del campo testo “codeCAPTCHA”

<input id="codeCAPTCHA" name=" codeCAPTCHA " type="text" maxlength="5" value="" /> 

sia uguale a quello del cookie “codCAPTCHA”.



Ti potrebbe interessare anche

commenta la notizia

C'è 1 commento
Redazione
Condividi le tue opinioni su questo articolo!