wbSecurity

wbSecurity 1.2
© Simone Cingano

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