- Home
- Categorie
- Coding e Sistemistica
- PHP
- Criptare password con MD5 (con conferma password)
-
Criptare password con MD5 (con conferma password)
Ciao a tutti.
Avrei un problema sul modo di criptare la password inserita nel form al momento della registrazione al sito.Il codice del form registrazione.php è questo:
<form name="iscrizione utente" action="elabora_registrazione.php" method="post"> <table border="0" cellspacing="5" cellpadding="5"> <tr> <td>Nome Utente:</td><td><input name="nomeutente" type="text" size="35" maxlength="40" value=""></td> </tr> <tr> <td>Cognome Utente:</td><td><input name="cognomeutente" type="text" size="35" maxlength="40" value=""></td> </tr> <tr> <td>E-mail:</td><td><input type="text" name="email" size="35" maxlength="40" value=""></td> </tr> <tr> <td>Username</td><td><input type="text" size="35" maxlength="30" name="username" value=""></td> </tr> <tr> <td>Password:</td><td><input type="password" name="password"></td> </tr> <tr> <td>Conferma Password:</td><td><input type="password" name="pwd_conferma"></td> </tr> <tr><td></td><td><input type=submit value="Invia i Dati"><input type=reset value="Annulla"></td></tr> </table> </form>
Come vedete c'è la password da mettere e poi la conferma password con i controlli relativi fatti nella pagina elabora_registrazione.php riportata sotto:
<?php $nomeutente = $_POST['nomeutente']; $cognomeutente = $_POST['cognomeutente']; $email = $_POST['email']; $username = $_POST['username']; $password = $_POST['password']; $pwd_conferma = $_POST['pwd_conferma']; $db_query = "SELECT * FROM utenti WHERE username = '$username'"; $res = mysql_query($db_query, $db) or die(mysql_error()); $num_rows = mysql_num_rows($res); // Controllo campi obbligatori if($email==NULL || $username==NULL || $password==NULL) { echo "<br><br><br><br><br><p class='login'>Tutti i campi sono obbligatori, <a href='registrazione.php'>Torna Indietro</a></p>"; } // Controllo Password else if($password != $pwd_conferma) { echo "<br><br><br><br><br><p class='login'>Le password inserite non sono coincidenti, <a href='registrazione.php'>Torna Indietro</a></p>"; } else if(strlen($password) < 4 || strlen($password) > 12) { echo "<br><br><br><br><br><p class='login'>Password troppo corta, o troppo lunga (Minimo 4 lettere e Massimo 12 lettere), <a href='registrazione.php'>Torna Indietro</a></p>"; } // Registrazione dell'utente nel database else { $query = "INSERT INTO utenti (nomeutente, cognomeutente, email, username, password) VALUES ('$nomeutente','$cognomeutente','$email','$username',$password)"; mysql_query($query) or die(mysql_error()); echo"<br><br><br><br><br><p class='login'>Registrazione effettuata. Esegui il login da <a href='index.php'>QUI</a></p>"; } ?>
Volevo chiedervi qualche consiglio su dove mettere il codice MD5 visto che c'è anche il controllo conferma password.
Grazie a tutti..
-
Appena prima di inserirla nel database...
$password=md5($password);
-
ho provato ma il problema è che dopo mi da errore di riscontro tra la password criptata e quella che metto in "conferma password". Se fosse solo da inserire la pass andrebbe bene...il problema che ho è quello del doppio inserimento password in "password" e in "conferma password".
Qualcuno sa darmi qualche dritta?
grazie mille
-
strsql="INSERT INTO table_name (password) VALUES(MD5('$password')) ";
controlla bene la posizione degli apici di md5, vado a memoria....
-
@danzur1981 said:
ho provato ma il problema è che dopo mi da errore di riscontro tra la password criptata e quella che metto in "conferma password".
Ho detto: appena prima di inserirla nel database!
-
Ok. Problema risolto. Grazie mille ad entrambi.
INSERT INTO utenti (nomeutente, cognomeutente, email, username, password) VALUES ('$nomeutente','$cognomeutente','$email','$username',MD5('$password')) ```. Adesso però ho un problema che non riesco a risolvere: nella pagina di login dove devo mettere il codice MD5? :? Posto la pagina:
$username = $_POST['username'];
$password = $_POST['password'];$result = mysql_query("SELECT * FROM utenti WHERE username='$username'"); if(mysql_num_rows($result) == 0) { echo "<br><br><br><br><br><p class='login'><b>$username</b> non esiste come utente registrato</p>"; echo "<p class='login'>Riprova ad inserire i dati alla pagina di <a href='login.php'>LOGIN</a></p>"; } else { $check = mysql_fetch_array($result); $user = $check['username']; $pass = $check['password']; if($username == $user && $password == $pass) { $_SESSION['username'] = "$username"; $_SESSION['password'] = "$password"; echo "<br><br><br><p class='login'>Login effettuato con successo<br></p>"; echo "<p class='login'>Benvenuto <b>$username</b><br></p>"; echo "<p class='login'>Adesso puoi accedere al contenuto della pagina privata dalla <a href='index.php'>homepage</a></p>"; } else { echo "<br><br><br><br><p class='login'>Password errata<br></p>"; echo "<p class='login'>Riprova ad inserire i dati alla pagina di <a href='login.php'>LOGIN</a></p>"; } }
Grazie mille dell'aiuto che mi state dando
-
ora che hai inserito la password criptata ti conviene scaricare una classe in php che gestisce il login dell'utente.
altrimenti diventa troppo complicato e non ne esci fuori facilmente
-
@danzur1981 said:
Adesso però ho un problema che non riesco a risolvere:
nella pagina di login dove devo mettere il codice MD5?
Ragiona!
Devi averlo bene in testa... analizza bene il problema.Adesso hai una tabella 'utenti' in cui sono memorizzati user e password (attenzione: la password non è memorizzata in chiaro bensì criptata).
Dal form del login arrivano due dati: user e password (in chiaro).
Non ti resta che 'trovare' nel database l'user e, una volta trovato, confrontare la sua password memorizzata con quella inserita nel login...Pensa bene: in che punto va criptata la password proveniente dal login?
-
dal form arriva la password in chiaro:
Es. prova
Sul DB hai qualcosa tipo
92j2h2h92h2g292j22j2j (in md5)
Devi confrontare i due dati, come fai?
-
Tutto risolto.
Avevo già pensato alla soluzione e ci avevo già provato prima ancora di chiedere nel forum:$username = $_POST['username']; $password = md5($_POST['password']);
ma purtroppo mi sono accorto solo ora che nella tabella utente avevo impostato come attributo del campo password una varchar(30) e l'MD5 cripta la password in una char(32). Mea culpa. Sorry!!!
Grazie a tutti cmq. Meglio dare consigli come avete fatto che dare la soluzione direttamente.
Al prossimo problema
-
@danzur1981 said:
Meglio dare consigli come avete fatto che dare la soluzione direttamente.
Credo che ragionare e capire sia molto meglio che ricevere la pappa pronta!
Tieni presente che se per caso decidi di utilizzare sha1() anzichè md5(), devi impostare 40 caratteri...Ciao.
-
Per sicurezza, io metterei un varchar(100) così se il contenuto è di 32, si setta in automatico a 32!