password

Fabrizio Villa

Utente Attivo
19 Gen 2013
131
0
16
Salve !
Vorrei sapere come impostare una password.
Ne mio database ho creato una tabella con un campo chiamato "PASS" di tipo "VARCHAR" e uno chiamato "login" sempre varchar.

Il campo PASS ha valore: 21232f297a57a5a743894a0e4a801fc3 (cioè ADMIN)
Il campo LOGIN ha valore: admin

Il codice criptato l'ho trovato su internet e funziona.
Come si crea un codice criptato così o meglio come si fa a cambiare la password???
Grazie!
 
Se non ho capito male quello che chiedi, nel form di registrazione o di modifica del profilo che crei ci sarà naturalmente il classico

HTML:
<input type="password" name="pass1" placeholder="Pass">

poi naturalmente filtrerai il dato immesso nella form con una cosa del genere (almeno io uso questa)

PHP:
$pass1= trim($_POST['pass1']);
$pass1_filtrata = $mysqli->real_escape_string($pass1);

e prima di inviarla alla query di INSERT o UPDATE la cripti

PHP:
$pass_criptata = sha1($pass1_filtrata);

infine nella query inserirai la variabile $pass1_filtrata; ho fatto l'esempio con sha1 ma puoi usare quello che vuoi.
Spero di esserti stato utile :D
 
Fabrizio scusa, mi sono accorto che ho sbagliato una cosa, nella query di INSERT o di UPDATE non devi inserire la variabile $pass1_filtrata ma la variabile $pass_criptata :D sennò criptarla è stato inutile :D scusa ancora!
 
Ciao Akuma,
grazie per la risposta, ma non credo di essermi spiegato correttamente.
Quello che vorrei poter fare è usare un'altra password che non sia ADMIN.
Nel database, il campo PASS ha valore ADMIN, scritto però in questa forma:

21232f297a57a5a743894a0e4a801fc3
databasepassword.png

Nella pagina del login se scrivo nome utente "admin" e password "admin" posso accedere alla mia pagina.
Se invece, nel database, al posto di questo "codice" (21232f297a57a5a743894a0e4a801fc3)
ci scrivo per esempio "marmellata" e poi nella pagina login scrivo nome utente "admin" e password "marmellata" non funziona.
Come mai?
 
Ciao Akuma,
grazie per la risposta, ma non credo di essermi spiegato correttamente.
Quello che vorrei poter fare è usare un'altra password che non sia ADMIN.
Nel database, il campo PASS ha valore ADMIN, scritto però in questa forma:

21232f297a57a5a743894a0e4a801fc3
Vedi l'allegato 2215

Nella pagina del login se scrivo nome utente "admin" e password "admin" posso accedere alla mia pagina.
Se invece, nel database, al posto di questo "codice" (21232f297a57a5a743894a0e4a801fc3)
ci scrivo per esempio "marmellata" e poi nella pagina login scrivo nome utente "admin" e password "marmellata" non funziona.
Come mai?

Le pass criptate dato che NON possono essere decriptate, nel momento del login per autenticare un utente ci sarà un controllo che cripterà la pass immessa nella form per confrontarla con quella già criptata nel database, quindi una cosa del genere:

PHP:
$pass_decr = trim($_POST['pass_decr']);
$pass_pulita = $mysqli->real_escape_string($pass_decr);

$pass_cript = sha1($pass_pulita);

$controllo_dati = $mysqli->query("SELECT * FROM utenti WHERE email_utente = '$email' AND password = '$pass_cript' ");

quindi nel tuo form quando scrivi "marmellata" questa viene criptata e se sul db la pass è scritta in chiaro e quindi non criptata fallisce la login.

se vuoi togliere il sistema di criptazione basta che togli questo passaggio nel controllo della login:

PHP:
$pass_cript = sha1($pass_pulita);

e nella query quindi devi togliere la variabile criptata $pass_cript ed inserire solo quella filtrata $pass_pulita
 
devi fare un update del record interessato. Una cosa del genere (occhio che è PHP maccheronico)

UPDATE utenti SET password = SHA1($_POST["campo_password"]) WHERE id = $_GET["id_univoco_utente"]
 
Ciao, grazie per le risposte.
Purtroppo essendo piuttosto inesperto di php non riesco a capire bene dove sbaglio.
Posto il mio codice:

PHP:
$log = $_POST['Tlogin'];
	$pass = md5($_POST['TPass']);
	
	$sql_util = "Select * From tutil 
				 WHERE login = '".$log."' 
				 AND pass = '".$pass."'";
				 
	$req_util = mysql_query($sql_util) or die ("Erreur SQL > ".$sql_util."<br />".mysql_error());

E poi:

PHP:
	echo '<form name="Flog" method="post" action="index.php" class="FormLog">
					<label>Login : </label><input type="text" name="Tlogin" /><br />
					<label>Password : </label><input type="password" name="TPass" placeholder="Pass"/><br />
					<input type="submit" name="BtSend" value="Login" /><br />';
				if (isset($err))
					echo $err;
				echo '</form>';

:confused::confused::confused::confused::confused:
 
Ciao, grazie per le risposte.
Purtroppo essendo piuttosto inesperto di php non riesco a capire bene dove sbaglio.
Posto il mio codice:

PHP:
$log = $_POST['Tlogin'];
	$pass = md5($_POST['TPass']);
	
	$sql_util = "Select * From tutil 
				 WHERE login = '".$log."' 
				 AND pass = '".$pass."'";
				 
	$req_util = mysql_query($sql_util) or die ("Erreur SQL > ".$sql_util."<br />".mysql_error());

E poi:

PHP:
	echo '<form name="Flog" method="post" action="index.php" class="FormLog">
					<label>Login : </label><input type="text" name="Tlogin" /><br />
					<label>Password : </label><input type="password" name="TPass" placeholder="Pass"/><br />
					<input type="submit" name="BtSend" value="Login" /><br />';
				if (isset($err))
					echo $err;
				echo '</form>';

:confused::confused::confused::confused::confused:


devi modificare questo da:

PHP:
$pass = md5($_POST['TPass']);

a:

PHP:
$pass = $_POST['TPass'];

se questo sito devi metterlo online, mi raccomando di filtrare questi input con un mysqli_real_escape_string (o quello che vuoi), perchè allo stato attuale con un ' ti si blocca tutta la query ed è vulnerabile ad sql injection
 
Ecco,
ora funziona come volevo.
Potresti spiegarmi come fare a filtrare l'input...non è ho idea...Chiedo troppo?
Grazie infinite...
 
Ecco,
ora funziona come volevo.
Potresti spiegarmi come fare a filtrare l'input...non è ho idea...Chiedo troppo?
Grazie infinite...

Esempio dovrai filtrare così:

PHP:
$log = $_POST['Tlogin']);
$pass = $_POST['TPass']);

$log_filtrato = $mysql_real_escape_string($log);

$pass_filtrata = $mysql_real_escape_string($pass);

$sql_util = "Select * From tutil  WHERE login = '".$log_filtrato."' AND pass = '".$pass_filtrata."'";

allora ti spiego brevemente e con linguaggio terra terra (per evitare di perderci in inutili paroloni) cosa succede.

Il mysql_real_escape_string è quello che serve più di tutti (a dire il vero c'è una funzione automatica che dovrebbe fare quello che fa il mysql_real_escape_string ma a volte in base all' host ecc.. potrebbe essere disabilitato ed a mio consiglio è sempre meglio farlo manualmente e disattivare l'automatico così stai tranquillo), chiusa questa parentesi ti spiego cosa fa; antepone il carattere \ davanti a quei caratteri che possono essere dannosi.

Senza mysql_real_escape_string il tuo script se un utente avesse scritto come log: ant'onio

la query sarebbe diventata:

PHP:
$sql_util = "Select * From tutil  WHERE login = 'ant'

quell' apice come vedi la blocca in quel punto, invece con mysql_real_escape_string:

PHP:
$sql_util = "Select * From tutil  WHERE login = 'ant\'onio' AND pass = 'blablabla';

come vedi eseguendo la query correttamente, naturalmente il \ verrà anteposto solo durante l'esecuzione e non verrà registrato sul database insieme ai dati.

Spero di essermi spiegato il meglio possibile :D
 

Discussioni simili