Captcha in ASP

Il test CAPTCHA (Completely Automated Public Turing test to tell Computers and Humans Apart) serve ad impedire l'accesso dei cosidetti roBOT nei nostri moduli on line al fine di ridurre lo spam. La soluzione prevede di far inserire all'utente una sequenza di caratteri (e/o cifre) che appaiono in un'immagine generalmente poco riconoscibile dai software OCR.

Per inserire un controllo captcha basato su ASP Security Image Generator possiamo procedere nel seguente modo. Accertiamoci di scaricare asp_captcha.zip contenente il file "captcha.asp" (realizzato da Emir Tüzül) e pubblichiamolo sul nostro sito. Inseriamo nella pagina del nostro FORM il seguente codice:

<img src="captcha.asp" alt="CAPTCHA Image" />

che visualizzerà un'immagine simile a questa:

CAPTCHA Image

ed aggiungiamo il seguente campo al FORM:

<input name="strCAPTCHA" type="text" id="strCAPTCHA" />

che l'utente dovrà completare con la stringa visualizzata nell'immagine.

Ora passiamo a modificare il file indicato come "action" del FORM ed inseriamo questa funzione:

<%
Function CheckCAPTCHA(valCAPTCHA)
  SessionCAPTCHA = Trim(Session("CAPTCHA"))
  if Len(SessionCAPTCHA) < 1 then
    CheckCAPTCHA = False
    exit function
  end if
  if LCase(CStr(SessionCAPTCHA)) = LCase(CStr(valCAPTCHA)) then
    CheckCAPTCHA = True
  else
    CheckCAPTCHA = False
  end if
End Function
%>

A questo punto utilizziamo il seguente controllo

<%
strCAPTCHA = Trim(Request.Form("strCAPTCHA"))
if CheckCAPTCHA(strCAPTCHA) = true then
  ' go ahead, it's a human
else
  ' spam avoided"
end if
%>

per distinguere le azioni da intraprendere.

Inoltre, è possibile personalizzare le immagini generate, modificando i seguenti parametri del file "captcha.asp":

<%
'#Editable consts and variables
dim Bitmap(25,110) '[Height,Width]
const CodeLength = 5 'Secure code length (Max:8)
const CharTracking = 4 'Set the tracking between two characters
const RndTopMargin = true 'Randomize top margin every character
const NoiseEffect = 2 '0[none], 1[sketch], 2[random foreground lines], 3[random background lines],
                      '4[1 and 3 (Recommed maximum NoiseLine=4)]
const NoiseLine = 5 'Low values make easy OCR, high values decrease readability
const MinLineLength = 6 'Minimum noise line length
%>

 

Per commenti, scriveteci.