Recuperare le password con Asp

Siti dinamici con ASP
Impara a creare siti dinamici professionali con ASP

Scritto da Luca Ruggiero nella sezione Asp

A quanti servizi di Hosting, di Affiliazione, Email, Forum, Newsletter, Newsgroup, Chat, ed altre diavolerie del genere siete registrati? Se sono la metà dei miei saranno un migliaio! E pretendete che mi ricordi tutte le Password? Specie di quei servizi che all'atto dell'iscrizione generano Password casuali tipo a56Xo98D72.

Allo scopo molti di questi mettono a disposizione dell'utente registrato un sistema più o meno sicuro per ricordare la Password ai più smemorati, semplicemente indicando l'indirizzo email col quale si è effettuata a suo tempo la registrazione, ed inviando una mail di memoria... non di fosforo, indica solo la Password ;-)

L'applicazioncella si sviluppa in maniera molto lineare: ogni servizio ha una tabella, ad esempio utenti, in cui sono registrati (ovviamente) gli utenti registrati al servizio. Ipotizziamo che questa tabella sia composta solo dai campi id (per l'esempio in questione non ce ne può fregare di meno, ma in genere si usa!), username, password ed email.

All'atto dell'invio del modulo (composto dal solo campo email) le operazioni da compiere sono: recuperare l'indirizzo, validarlo, controllare che l'utente esista, e se Dio ce la manda buona gli inviamo la mail con la Password!

Di seguito il codice ampiamente commentato:

<%@LANGUAGE = JScript%>
<%
    // Operazioni preliminari:
    // - Apro un buffer di memoria per evitare di incappare in errori di caching
    // - Verifico che il modulo sia stato inviato
    // - Setto l'espressione regolare di un indirizzo email
    Response.Buffer = true;
    var invia = new String(Request.QueryString("invia"));
    var controlla = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-]{2,})+.)+([a-zA-Z0-9]{2,})+$/;
%>
<html>
<body>

<h3 align="center">Hai dimenticato la Password?</h3>
<p align="center">Inserisci l'indirizzo email con cui ti sei registrato e la riceverai entro pochi minuti!</p>

<p align="center">
    <form method="POST" action="password.asp?invia=PWD">
        <input type="text" name="email">
        <input type="submit" value="OK">
    <form>
</p>

<p align="center">
<%
    if (invia == "PWD")
    {
         // Recupero l'indirizzo email dell'utente dal modulo
         var email = new String(Request.Form("email"));
             // Se non viene inerito alcun indirizzo email restituisco un messaggio di errore
             if (!controlla.test(email))
             {
                 Response.Write("<font color='#FF0000'>Email errata... non te ne sei accorto!</form>");
             }
             else
             {
                 // Apro la connessione al database e verifico che l'utente esista
                 var Cn = new ActiveXObject("ADODB.Connection");
                 Cn.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("database.mdb"));
                 var verifica = Cn.Execute("SELECT * FROM utenti WHERE email = '" + email + "'");
                     // Se l'utente non esiste restituisco un altro messaggio di errore
                     if (verifica.EOF)
                     {
                         Response.Write("<font color='#FF0000'>Email non presente, non sei registrato... muori!</form>");
                     }
                     // Se l'utente esiste gli invio la mail con la Password
                     else
                     {
                         var mail = new ActiveXObject("CDONTS.NewMail");
                             mail.To = email;
                             mail.From = "staff@servizio.ext"; // Email del tuo servizio con cui invii la mail all'utente
                             mail.Subject = "Password dimenticata";
                             mail.Body = "Ciao " + verifica("username") + ", la tua Password è " + verifica("password");
                             mail.Send();
                         Response.Write("Password inviata all'indirizzo " + email);
                         Response.Write("<br>Ti consiglio una curetta di fosforo!");
                     }
                 Cn.Close();
             }
    }
%>
</p>

</body>
</html>
Lo scopo per cui si compiono tante operazioni preliminari e verifiche è quello di evitare sprechi di risorse... perchè uccidere la salute ad un povero server Web facendogli aprire una connessione ed inviare una mail ad un utente che non esiste?

I più cliccati della sezione Asp

:: Un semplice form mail in Asp (51.682)

:: Creazione di un Guestbook in Asp (50.783)

:: Creazione di un'area di accesso riservato in Asp (45.423)

:: Connessione ad un database MySql con Asp (25.045)

:: Connessione ad un database Microsoft SQL Server con Asp (24.069)

:: Asp e database (23.123)

:: Differenza tra i metodi get e post e recupero dei dati, attraverso Asp (22.301)

:: Una semplice area di accesso riservato senza DB in Asp (21.384)

:: Riscrivere le URL con Asp (19.743)

:: Creazione di un Sondaggio in Asp (19.100)

IN EVIDENZA
DOWNLOAD