La gestione di un’applicazione Web che prevede una fase di login deve necessariamente mettere a disposizione un meccanismo che permetta autonomamente agli utenti dell’applicazione stessa di cambiare la password in qualsiasi momento.
Naturalmente la password in questione deve sempre e comunque rispettare degli standard di sicurezza imposti all’atto dell’iscrizione e rispettati anche in fase di login, oltre che, naturalmente in fase di cambio della password.
Si ipotizzi un database Access che chiamiamo “db.mdb” corredato dalla tabella “utenti” e composta dai campi “id” (Contatore) “username” e “password” (Testo, 15 caratteri).
Si crei adesso il file cambia-password.asp di cui segue il codice completo:
<%@LANGUAGE = VBScript%>
<%
If Session("username") = "" Then
Response.Write "Accesso negato!"
Response.End
End If
%>
<html>
<head>
<title>Cambia Password... in ASP!</title>
</head>
<body>
<form method="post" action="cambia-password.asp">
Vecchia Password<br>
<td><input type="password" name="vecchia" maxlength="15">
<br><br>
Nuova Password<br>
<input type="password" name="nuova" maxlength="15">
<br><br>
Conferma Password<br>
<input type="password" name="conferma">
<br><br>
<input type="submit" name="cambia" value="Conferma"><br>
</form>
<%
Dim cambia, vecchia, nuova, conferma
cambia = Server.HTMLEncode(Request.Form("cambia"))
vecchia = Request.Form("vecchia")
nuova = Request.Form("nuova")
conferma = Request.Form("conferma")
If cambia = "Conferma" Then
Dim sc, cn, rs, sql
sc = "driver={Microsoft Access Driver (*.mdb)};dbq=" _
& Server.MapPath("db.mdb")
Set cn = Server.CreateObject("ADODB.Connection")
Set rs = Server.CreateObject("ADODB.Recordset")
cn.Open sc
sql = "SELECT password FROM utenti " _
& "WHERE username = '" & Session("username") & "'"
rs.Open sql, cn, 1
If vecchia = "" Or nuova = "" Then
Response.Write "Specificare dei valori!"
ElseIf rs("password") <> vecchia Then
Response.Write "La vecchia passwrod è errata!"
ElseIf nuova <> conferma Then
Response.Write "La conferma della nuova password errata!"
ElseIf vecchia = nuova Then
Response.Write "La vecchia e la nuova password coincidono!"
Else
sql = "UPDATE utenti SET password = '" & nuova & "' WHERE " _
& "username = '" & Session("username") & "'"
cn.Execute(sql)
Response.Write "Password modificata con successo!"
End If
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End If
%>
</body>
</html>
La prima fase del codice prevede la verifica dell’autenticazione dell’utente, dato che solo un utente esistete può cambiare la propria password ed inoltre abbiamo bisogno della sessione contenente la sua username in fase di modifica vera e propria, come vedremo più avanti nel codice.
Abbiamo per prima cosa il modulo di cambio password che chiede l’attuale (o vecchia) password, la nuova password e la conferma della scelta della nuova password, in modo da rispettare anche gli standard filosofici di sicurezza vigenti su Internet.
Il modulo prevede di per se anche un controllo lato client sulla linghezza della password, ma è opportuno implementare tale controllo anche lato server: cosa che lo script di esempio non fa.
Una volta che il modulo è stato effettivamente inviato andiamo ad effettuare una serie di controlli:
- verifica che i campi non vengano lasciati vuoti; *
- verifica che l’attuale (vecchia) password sia uguale a quella inserita;
- verifica che la nuove password coincida con la conferma;
- verifica che la nuova password non sia uguale alla vecchia.
Una volta soddisfatte queste condizioni si procederà con la modifica vera e propria della password.
* Si consiglia di utilizzare le espressioni regolari per verificare che la password rispetti gli standard di sicurezza utilizzati, come detto in precedenza, in fase di creazione dell’account e di login.
