Installazione
Copiate in una cartella del sito i seguenti file
inc.md5.asp - un file comune per checksum md5
inc.wbsecurity.asp - l'insieme delle funzioni di wbsecurity
wbsecurity.asp - il file che genera l'immagine
Implementazione
Nella pagina con la form che vogliamo sia protetta con wbsecurity bisogna eseguire queste modifiche:
aggiungere le inclusioni dei due file (questo in testa alla pagina) ovviamente indicando i percorsi corretti (in questo caso ho assunto che i file siano nella stessa cartella della pagina):
<!--#include file = "inc.md5.asp"--> <!--#include file = "inc.wbsecurity.asp"-->
e all'interno della form aggiungere la parte con il codice di controllo (ovviamente indicando il percorso corretti a wbsecurity (in questo caso ho assunto che wbsecurity.asp sia nella stessa cartella della pagina)
<!-- START WBSECURITY --> <img id="wbscode" src="wbsecurity.asp?c=<%=noCache%>" style="vertical-align:middle;" alt="codice di controllo (necessaria la visualizzazione delle immagini)" /> <input type="text" id="securitycode" name="securitycode" maxlength="6" /> <!-- END WBSECURITY -->
siamo già a metà dell'opera
Nella pagina che processa i dati della form (può ovviamente essere la stessa di prima) mettete le stesse inclusioni
<!--#include file = "inc.md5.asp"--> <!--#include file = "inc.wbsecurity.asp"-->
e poi PRIMA dell'inserimento nel db (o comunque del controllo dell'utilizzo dei dati del form) queste poche linee
<%
'**** START WBSECURITY ****************************************************
dim wbs_securitycode, wbs_currentsecuritycode, wbs_isvalid
wbs_securitycode = request.form("securitycode") 'o request.querystring("securitycode") a seconda del <form> method
if session("wbsecurity-generator") = "" then
'cookie non attivi
wbs_isvalid = false
else
wbs_currentsecuritycode = getSecurityCode(session("wbsecurity-generator"))
wbs_isvalid = (wbs_currentsecuritycode = wbs_securitycode)
if not wbs_Simple or wbs_isvalid then session("wbsecurity-generator") = getSecurityCodeGenerator()
end if
'**** END WBSECURITY ******************************************************
%>
infine il vostro discriminante sarà
WBS_ISVALID
<%
if wbs_isvalid then
'codice corretto
SQL = "..."
conn.execute SQL
else
'codice non corretto
response.write "attenzione, il codice di controllo non è stato inserito correttamente<br/>"
response.write "(controllare di avere i cookie abilitati)"
end if
%>
Da notare che se l'utente ha i cookie disabilitati (in generale o per il vostro sito) wbs_isvalid sarà sempre falso (sia che il codice sia corretto o meno), quindi ricordate di segnalare all'utente di controllare che i cookie siano abilitati
Personalizzazione
E' essenziale, appena installato e funzionante, eseguire una personalizzazione
aprite inc.wbsecurity.asp e vedete le prime linee
1. SEED (wbs_SetSeed)
è un valore numerico di 10 cifre che deve essere scritto ex-novo dopo l'installazione
scrivetelo a mano inventando 10 cifre numeriche ;)
2. COLORI (wbs_...Color)
potete indicare i colori di bordo, nucleo e sfondo per l'immagine
ovviamente sceglieteli in base al layout del vostro sito
3. SEMPLICE/COMPLETO (wbs_Simple)
questa variabile booleana (vero/falso) serve a indicare il livello di sicurezza
se impostato a TRUE il codice viene modificato solo quando viene caricata l'immagine
in questa maniera se uno sbaglia e torna indietro con il tasto BACK del browser il codice rimasto in cache è ancora valido.
se impostato a FALSE il codice viene modificato ad ogni controllo
in questa maniera se il controllo fallisce e l'utente usa il tasto BACK del browser
si troverà un'immagine non aggiornata e quindi un codice errato anche nell'immagine
In linea di massima è meglio lasciare wbs_Simple a TRUE, se però ovviate alla possibilità di premere il tasto back del browser (con javascript ad esempio) ricaricando l'immagine del codice potete impostarlo a FALSE ed essere certi che nessun sistema automatizzato potrà superare la barriera di wbSecurity
Carica nuovo codice
E' possibile semplificare ancora l'esperienza dell'utente aggiungendo un link/bottone che carichi un nuovo codice (nel caso in cui non sia più valido) utilizzando un semplice codice javascript (unobtrusive ovviamente)
La porzione di codice è da personalizzare a seconda della pagina, della path di wbsecurity.asp e dell'id dell'immagine nella form
Il codice javascript si occupa di generare un numero univoco (vedi note in fondo a questa pagina)
<a href="pagina.asp" onclick="var date = new Date();
document.getElementById('wbscode').src =
'wbsecurity.asp?c='+(1900+date.getYear()) +
(date.getMonth()+1) +
date.getDate() +
date.getHours() +
date.getMinutes() +
date.getSeconds() +
date.getMilliseconds();
return false;">chiedi nuovo codice</a>
Note
Il valore c=xxx (dove xxx sono numeri) indicato sempre a termine di wbsecurity.asp non è come si potrebbe pensare un valore che influenza il calcolo del codice (per quello sono utilizzati il SEED e l'ORA del server), ma è altresì un numero univoco (calcolato dalla data) utilizzato per evitare che i browser salvino nella loro cache l'immagine generata da wbSecurity

