ASPcenter.net

1 marzo 2010

Cambia Password… in ASP!

Archiviato in: ASP e Sicurezza — Tag:, , — lukeonweb @ 15:00

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:

  1. verifica che i campi non vengano lasciati vuoti; *
  2. verifica che l’attuale (vecchia) password sia uguale a quella inserita;
  3. verifica che la nuove password coincida con la conferma;
  4. 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.

Nessun commento »

Non c'è ancora nessun commento.

RSS feed dei commenti a questo articolo. TrackBack URL

Lascia un commento

ASPcenter.net è il blog italiano su ASP, ASP.Net, VB.Net, C# e Visual Studio - Funziona con WordPress