Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Login con criptazione della password

Un'utile funzione per proteggere la privacy
Un'utile funzione per proteggere la privacy
Link copiato negli appunti

Creare un'area riservata per il proprio sito web è molto importante ed utile per poter permettere di visionare ed offrire servizi ed informazioni ai propri utenti del web. Però, nella realizzazione di tale area, bisogna considerare abbondantemente anche la sicurezza per i dati che i nostri visitatori forniscono per poter accedere all'area interessata. Proprio per questo motivo, desidero illustrarvi in questo articolo come proteggere, tramite criptazione, la password fornita in fase di registrazione.

L'intero log-in si suddividerà in diversi file. Ora spiego il compito generale di ognuno e poi li analizzeremo in dettaglio.

  • inserisci.asp: grazie a questo file è possibile immettere i dati necessari alla registrazione dell'utente. I dati necessari per la registrazione sono il nome utente (username), il codice d'accesso (e la relativa conferma) e l'indirizzo e-mail dell'utente.
  • logon.asp: grazie a questa pagina è possibile identificarsi nel sistema protetto. Sarà in questa pagina che bisognerà fornire la propria userName e la propria password
  • lost.asp: grazie a questo file è possibile inviare tramite posta elettronica (fornita in fase di registrazione) la password in caso di smarrimento o dimenticanza della stessa.
  • edit.asp: grazie a questo file, è possibile variare i dati immessi nel proprio profilo in fase di registrazione. L'unico dato non variabile è il nome utente.
  • funzioni.asp: questo file, contiene le due funzioni necessarie per la protezione della password. Al suo interno è infatti possibile trovare la funzione di criptazione, la relativa funzione di decriptazione e la chiave numerica di criptazione/decriptazione.
  • users.mdb: questo file rappresenta il database degli utenti. La password di protezione per lo stesso database è innovatel.

Ora incominceremo l'analisi vera e propria dei file appena descritti nell'ordine in cui li ho sviluppati per render possibile tale progetto.

funzioni.asp

Una volta aperto tale file possiamo trovare 3 parti fondamentali al suo interno. La prima riguarda la chiave necessaria per la criptazione e la decriptazione della password quando si effettua qualunque operazione di questo progetto.

dim key
key = 5 ' Valore assegnato da me per la fase di test.

La succesiva parte riguarda la funzione di criptazione della password. Questa funzione necessita di due parametri per funzionare regolarmente. Il primo di essi è il testo da criptare ed il secondo è il valore della chiave numerica dichiarata nella fase uno di questo file.

function cripta(strTesto,intKey)
'corpo della funzione
end function

Nell'ultima parte di questo file possiamo trovare la relativa funzione di decriptazione. Come la precedente, richiede due parametri in ingresso. Il primo sarà il testo da decriptare ed il secondo sarà la chiave numerica di decriptazione.

function decripta(strTesto,intKey)
'corpo della funzione
end function

Prima di concludere questo file, vorrei dare informazioni in merito allo stesso:

  • Una volta definita la chiave numerica e incominciato l'inserimento dei records degli utenti, tale chiave non va più modificata. Una modifica della stessa causerebbe la disuguaglianza tra la password immessa dall'utente e quella criptata presente all'interno del nostro database.
  • Per comodità di scrittura del codice e per una maggiore leggibilità dello stesso, il file funzioni.asp è stao incluso in tutte le pagine del progetto. In questo modo, una semplice variazione sulla chiave o sulle funzioni di criptaggio e relativo decriptaggio, verranno applicate automaticamete a tutto il progetto.

users.mdb

Dopo aver realizzato le funzioni di criptazione, di decriptazione ed aver testato con valori casuali la loro validità (per far ciò ho utilizzato lo script da me realizzato per la generazione di password casuali) ho progettato il database per la registrazione dei dati immessi nel form.

La struttura del database è la seguente:

Nome Campo Tipo Di dato Contenuto
Id_user Contatore Chiave primaria del nostro database. Ogni utente avrà un numero univoco per il riconoscimento. Il valore numerico verrà incrementato automaticamente dal database ogni volta che un nuovo utente effettua la registrazione.
userName Testo Questo campo contiene il nome utente. Come l'Id_user è univoco, ma non funge da chiave primaria. Questo valore verrà scritto in chiaro (senza nessuna criptazione)
userCode Testo Questo campo contiene la password fornita dall'utente. La password memorizzata all'interno di tale campo non è in chiaro, ma verrà memorizzata dopo la criptazione
userMail Testo Questo campo conterrà la mail di riferimento per i contatti con l'utente in caso di smarrimento della password. Il valore scritto in questo campo verrà memorizzato in chiaro (senza nessuna criptazione)

Prima di concludere la descrizione del database, si ricorda la password di accesso allo stesso: innovatel.

Per modificare tale password bisogna prima aprire il database e variare la password tramite interfaccia grafica di Microsoft Access e una volta fatto ciò, bisogna modificare la variabile contenente la password del database nelle pagine del progetto.

dim strCodedb
strCodedb="innovatel"

inserisci.asp

Questo file si suddivide in due parti fondamentali. Una prima di elaborazioni lato server ed una seconda che contiene un semplice modulo html per effettuare la registrazione.

L'aspetto del form dovrebbe essere simile a questo:

Screenshot

Dopo aver riempito il modulo se si preme il pulsante annulla, il form stesso verrà svuotato. In caso di pressione sul tasto registra, verrà azionata la parte di scripting lato server.

In questa parte, verranno controllati i campi del form. Il primo controllo consiste nel verificare se sono pieni tutti ed il codice e la sua conferma sono uguali. Se questo controllo viene superato, si cerca nel database se esiste già un utente con lo stesso nome. In caso non risultasse, viene immesso il nuovo utente e viene mostrato a video un messaggio di corretto inserimento. Se invece il nome utente è già in uso, non si effettua alcuna memorizzazione e si mostra un messaggio di avviso sul nome utente già in uso. Se l'inserimento dei dati viene eseguito, la password viene inserita direttamente criptata tramite la funzione presente all'interno del file funzioni.asp (file incluso in ogni pagina e descritto in precedenza).

<%
'Fase di inserimento nel database
rs.addnew
rs(1)=strUser
rs(2)=cripta(strCode1,Key)
rs(3)=strMail
rs.update
%>

Una volta effettuata la registrazione non parte nessun tipo di identificazione automatica nel sistema. Bisogna infatti effettuare la procedura di log-on per esser identificati in seguito nel sistema protetto.

logon.asp

In questa pagina l'utente deve dimostrare, fornendo nel seguente form il proprio user name e la propria password, la registrazione al sistema.

Screenshot

Una volta inviato il form, cioè cliccando sul pulsante di Accedi, verrà interrogato il database cercando un utente che abbia il nome utente e la password criptata corrispondende a quella immessa nel form.

strCode=cripta(strCode,key)
strSql = "SELECT * FROM codici WHERE userName='"&strUser&"'
AND userCode='"&strCode&"'"

Se dall'interrogazione appena mostrata, risulta un record viene abilitata (tramite i cookies) l'autorizzazione a navigare nelle pagine riservate.

'Autorizzo la navigazione in pagine protette
response.cookies("innovatel.it_accesso")("valido")="ok"
response.cookies("innovatel.it_accesso")("nome")=strUser

Per poter testare se l'utente può acceder alla pagina riservata è sufficente porre in testa ad ogni pagina il seguente script:

<%
Dim ckValido
ckValido = request.cookies("innovatel.it_accesso")("valido")
Dim ckUser
ckUser = response.cookies("innovatel.it_accesso")("nome")
If (ckValido<>"" And ckUser<>"") then
response.write "Bentornato "&ckUser
else
response.write "Accesso Negato"
response.end
End if
%>

lost.asp

A volte capita che gli utenti del nostro sito web dimenticano la password con la quale è stata effettuata la registrazione. Grazie a questo file, è possibile richiedere la password fornendo nel seguente form la propria userName a la mail fornite in fase di registrazione.

Screenshot

Una volta inviato il modulo, verrà cercato l'utente con userName ed indirizzo mail appena fornito e verrà prelevata la password criptata ed una volta decriptata verrà inviata tramite posta elettronica all'indirizzo di posta elettronica specificato. Il componente utilizzato nello script per l'invio della mail è il CDONTS.

Set mail = Server.CreateObject("CDONTS.NewMail")
strFrom = "Webmaster of innovatel.it<webmaster@innovatel.it>"
mail.From = strFrom
mail.to = rs(3)
strBody="username: <b>" & rs(1) &"</b><br>"
strBody= strBody & "password: <b>" & decripta(rs(2),key)
&"</b><br><br>"
strBody = strBody & "Richiesta effettuata il: " & now() &"<br>"
strBody = strBody & "Indirizzo I.P. richiedente: "& request.ServerVariables("REMOTE_ADDR")
&"<br><br>"
strBody = strBody & " *** Lo staff di innovatel.it *** "
mail.Body = strBody
mail.Subject = "Invio password smarrita"
mail.mailFormat=0
mail.bodyFormat=0
mail.Send
set mail = nothing

Una volta inviata la mail, l'utente dovrà solo attenderla nella propria casella di posta elettronica ed una volta ricevuta potrà rieffettuare il log-on per accedere all'area riservata offerta dal nostro sito web.

edit.asp

Molte volte, capita di voler variare i propri dati forniti all'atto di registrazione in un'area riservata. Grazie a questa pagina, è possibile modificare la casella di posta elettronica di riferimento, la propria password, ma non il proprio nome utente.

Screenshot

Il modulo appena illustrato in figura è stato realizzato in semplice html ed ha come pagina di azione se stessa.

Ora, supponiamo che il nostro utente abbia immesso tutti i dati e decida di salvare le modifiche nel proprio profilo personale.

Come primo passo, bisogna verificare la validità dei campi immessi ponendosi le seguenti domande:

  • Tutti i campi del form sono stati riempiti?
  • La nuova password e la sua conferma, coincidono?

Se entrambe le risposte sono affermative, è possibile procedere al passo successivo. Tale passo consiste nel verificare, tramite una semplicissima interrogazione sql sul nostro database, se esista un utente avente il nome utente e la password attuale (in versione criptata) uguali a quelle immessi nel form.

strSql = "SELECT * FROM codici WHERE userName='"&strUser&"' AND userCode='"&strCode1&"'"

Ora, se il nostro utente esiste, significa che tramite l'interrogazione del recordset otteniamo un record e quindi in fase di apertura il nostro recordset non è vuoto. Sarà proprio il record trovato ad esser aggiornato con i valori immessi dal form.

'Utente in elenco. Modifico il dato.
rs(1)=strUser
rs(2)=cripta(strCode2,Key)
rs(3)=strMail
rs.update

Il passo successivo è inviare, sempre tramite l'oggetto CDONTS la modifica dei dati alla casella di posta elettronica fornita. Il codice per l'invio della mail è molto simile a quello proprosto nella spiegazione di lost.asp. Cambia fondamentalmente nel testo e nella composizione dei dati.

Scarica l'esempio di questo articolo


Ti consigliamo anche