Guide ASP.NET – Create un validatore CAPTCHA compatibile con ASP 3.0

Mi è capitato ultimamente di avere dei grossi problemi di spamming in un guestbook che gestisco personalmente. In pratica ogni giorno qualche burlone d’oltremanica si divertiva ad inserire nel guestbook link di siti che gestivano la vendita di prodotti come il tramadol, il viagra e altro. Essendo che per fortuna non ho bisogno di alcun farmaco (tantomeno di questi!), e che il guestbook non aveva di certo alcun bisogno di essere pieno di messaggi completamente fuori luogo, ho deciso di aggiungere una validazione al form preesistente con l’aiuto di asp.net tramite un controllo CAPTCHA, che rende la gestione dei meta type (le immagini in particolare!) particolarmente semplice da gestire. C’è da dire che essendo il sito creato completamente in asp, non ho avuto né tempo né voglia di convertirlo ad asp.net, anche perchè essendo un sito amatoriale non mi paga nessuno per farlo, ecco perchè ho voluto integrare semplicemente le due tecnologie.

Questo è un esempio di ciò che vogliamo fare:

Esempio di Captcha che vogliamo realizzare

Ecco come funziona il form di validazione:

<form id="mailform" action="signguestbook.asp" method="post">
Nome <input id="name" type="text" name="name" value="" />
e-mail <input id="mail" name="mail" type="text" value="" />
<textarea id="object" name="object"></textarea>
Codice di verifica <img src="validazione.aspx" alt="codice di verifica" />
<input id="code" name="code" type="text" maxlength="5" value="" />
<input type="submit" value="Invia" />
</form>

è molto semplice, in pratica viene chiesto all’utente il nome, la mail e un breve messaggio da lasciare nel guestbook. In aggiunta ho inserito un’immagine che viene generata dinamicamente dal codice che vedremo fra poco ed un campo testo nel quale l’utente andrà ad inserire i numeri che vede nell’immagine per poter confermare la propria volontà di inserire il messaggio.Andiamo quindi a vedere il codice che ho utilizzato per generare l’immagine di validazione (nell’evento Page_Load della pagina):

//creo una nuova immagine di 100x50 pixel
System.Drawing.Image validImage = new System.Drawing.Bitmap(100, 50);
Graphics g = Graphics.FromImage(validImage);

StringBuilder builder = new StringBuilder();
Random rnd = new Random();

//creo il rettangolo dell'immagine e lo coloro di bianco
Rectangle rect = new Rectangle(0, 0, validImage.Width, validImage.Height);
g.FillRectangle(new SolidBrush(Color.White), rect);

//creo delle linee in posizioni x random per disturbare l'immagine
int x;
for (int i = 0; i < rnd.Next(10, 100); i++)
{
x = rnd.Next(0, validImage.Width);
g.DrawLine(new Pen(Color.Black), x, 0, x, validImage.Height);
}

//scrivo sull'immagine 5 numeri random 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);
builder.Append(num);
Color color = Color.Black;
g.DrawString(num.ToString(), new Font("Verdana", 12, FontStyle.Bold), new SolidBrush(color), x, y);
x += 20;
}

//genero l'uscita segnalando che l'output è di tipo jpeg
Response.ContentType = "image/jpg";
HttpCookie cookie = new HttpCookie("denis", builder.ToString());
cookie.Expires = DateTime.Now.AddMinutes(5);
Response.SetCookie(cookie);
validImage.Save(Response.OutputStream, ImageFormat.Jpeg);
validImage.Dispose();

Nella pagina signguestbook.asp, chiamata al submit del form, dovremo andare a controllare che sia presente il cookie che abbiamo salvato nel codice qui sopra e che il form inviato contenesse effettivamente il codice che abbiamo visualizzato nell’immagine. Per fare questo l’istruzione asp è abbastanza semplice:

dim SessionCode, code
SessionCode = Request.Cookies("denis")

code = Request.Form("code")
if(SessionCode <> code) then
'gestione dell'errore nel caso di codice differente
end if

A questo punto abbiamo validato il nostro form. Logicamente potete cambiare a piacere il modo in cui nascondere il codice nell’immagine generata con asp.net. Buon lavoro!

This entry was posted in ASP, Linguaggi .Net, Programmazione, Web e Web 2.0 and tagged , , , , , , , , , . Bookmark the permalink.

4 Responses to Guide ASP.NET – Create un validatore CAPTCHA compatibile con ASP 3.0

  1. Stefano says:

    Ottimo articolo!
    anche io ho un sito completamente in asp e questa integrazione delle due tecnologie è perfetta.

    Grazie

  2. Denis says:

    Stefano:

    Ottimo articolo!
    anche io ho un sito completamente in asp e questa integrazione delle due tecnologie è perfetta.

    Grazie

    Ciao Stefano, sono felice di esserti stato utile. D’altronde sono due ottime tecnologie, perchè non integrarle… biggrin emoticon

    Grazie per la visita, torna presto! ciao emoticon

  3. mexico77 says:

    ok ma quali classi hai usato?

  4. Denis says:

    mexico77:

    ok ma quali classi hai usato?

    Ciao mexico77… quali classi ho usato… per fare cosa esattamente?

Lascia un Commento

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

*

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>