Merlinox's Blog

Un facile CAPTCHA in Javascript

Volevo proporvi un semplice captcha in Javascript, per sapere cosa ne pensavate, soprattutto sulla sua validità.

Si basa sul principio che chi attacca un sito va a leggere ciò che compare nel HTML o al massimo una immagine, ma ciò che non è presente teoricamente non riesce a leggerlo.

 

Il numero "captcha" viene generato "lato client" tramite JS, e immesso all’interno di un campo input hidden.

Il controllo è doppio:

lato client con javascript per controllare la corrispondenza tra quanto inserito e quanto auto-generato (evento onload)

lato server con i due campi che arrivano url.captcha e url.captchaHidden

 

Conto sulla vostra opinione.

<script language="javascript">
function myLayer (x){
//individuo l’oggetto
if(document.layers){ // browser="NN4";
lay=document.layers[x];
}
if(document.all){ // browser="IE";
lay=eval("document.all." + x);
}
if(!document.all && document.getElementById){ // browser="NN6+ or IE5+ if you’re willing to dump the !document.all stuff";
lay=document.getElementById(x);
}
return lay;
}
function fnCaptcha(){
var numero=Math.random()*7*666;
var numero=Math.floor(numero);

myLayer("captchaNumber").innerHTML = numero;

document.frmCaptcha.captchaHidden.value = numero;
}
function fnCaptchaCheck(f){
if ((f.captcha.value == "") || (f.captcha.value == f.captchaHidden.value)){
alert("Numeri corrispondenti");
}else{
alert("Numeri diversi");
}
return false();
}
window.onload=function(){fnCaptcha();}
</script>

<h3>Prova Captcha</h3>
Inserisci il numero che vedi visualizzato tra le parentesi (<span id="captchaNumber"></span>)<br />
<form id="frmCaptcha" name="frmCaptcha" method="post" action="" onsubmit="return fnCaptchaCheck(this)">
<input name="captcha" type="text" id="captcha" />
<input name="captchaHidden" type="hidden" id="captchaHidden" />
<input type="button" name="Submit" value="Pulsante" />
</form>
<br />

Per aumentare il livello di sicurezza (non di molto) è consigliato fare transitare i dati via POST, quindi i campi si chiameranno: form.captcha e form.capthcaHidden.