utilizzare e gestire password criptate.

Ciao. Vorrei un po' capire come funzionano le password criptate.

Avrei alcune cose da chiedere ma iniziami subito da un caso concreto che devo affrontare.

Devo permettere all'utente di poter accedere ad una pagina che offre un determinato servizio.

Vorrei utilizzare una tabella del database mysql che già contiene campi con username e password degl'utenti.

Tramite phpmyadmin ho visto che il campo password contiene le password ma sono criptate.

La domanda è:

come faccio ad utilizzare la password criptata?

Mi spiego meglio.

L'utente inserisce il suo username nel campo username diciamo: ciccio.

e poi la password diciamo: spaghetti28

Il codice che riceve le variabili è una cosa del genere:

if ($_REQUEST['action']=='login') {
   $result=mysql_query("SELECT id_user FROM utentidb WHERE username='".$_REQUEST['username']."' AND password='".$_REQUEST['psw']."'");
   if (mysql_num_rows($result)>0) list($verified_user)=mysql_fetch_row($result);
   else $verified_user='';

In che modo il codice può "leggere" la pass cripata inserita nel campo?

Grazie

inviato 8 anni fa
frankphp
X 0 X

sai come sono state criptate le password? MD5?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
sai come sono state criptate le password? MD5?

Penso di si.

In ogni caso facciamo riferimento anche al metodo utilizzato nel forum phpbb2/3 visto che in futuro dovrò utilizzarle in modo da evitare tante registrazioni.

Grazie

risposto 8 anni fa
frankphp
X 0 X

prova a cambiare la query così:

... AND password='".md5($_REQUEST['psw'])."'

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

prova a cambiare la query così:

... AND password='".md5($_REQUEST['psw'])."'

e se volessi sia criptarla per inserirla nel db sia richiamarla?

grazie

risposto 8 anni fa
frankphp
X 0 X

Cosa intendi per richiamarla? Mostrarla in chiaro? Con l'MD5 non puoi, dovresti usare qualche altro sistema di cifratura, ad esempio blowfish.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Cosa intendi per richiamarla? Mostrarla in chiaro? Con l'MD5 non puoi, dovresti usare qualche altro sistema di cifratura, ad esempio blowfish.

 :bye:

No, usarla per la registrazione (nel caso sotto la inserisco direttamente io..si tratta di una prova)

e anche per il login:

la inserisco così:

........
function upload(){
if (isset($_REQUEST['username'])){
$dati=" INSERT INTO utentidb VALUES (NULL,
'".$_REQUEST['username']."',
'".md5($_REQUEST['password'])."',
'".$_REQUEST['email']."',
'".$_REQUEST['nota']."'
)";

.......

In questo caso tutto a posto nel campo della tabella del db è inserita una pass criptata.

Questo il modulo di login:

session_start();
dbconnect();
if (!isset($verified_user)) $verified_user='';
$username=str_replace("'","",$username);
$psw=str_replace("'","",$psw);

if ($_REQUEST['action']=='login') {
   $result=mysql_query("SELECT id_user FROM utentidb WHERE username='".$_REQUEST['username']."' AND password='".md5($_REQUEST['psw'])."'");
   if (mysql_num_rows($result)>0) list($verified_user)=mysql_fetch_row($result);
   else $verified_user='';
}
$_SESSION['nome']= $_REQUEST['username'];

$_SESSION['verified_user']=$verified_user;
if ($verified_user != '') {
   header("Location: testo.php");
} else {
   if ($_REQUEST['action'] == 'login' && $verified_user == '') {
      echo"<font color=\"red\">Login error!</font> <br> <br>";
   }
   ?>
<html>
<body>
<table height="100%" width="100%" border="0">
<tr>
<td align="center">
   <form name="login_form" action="login.php" method="post">
   <input type="hidden" name="action" value="login">
   <table align="center"  cellpadding="5" cellspacing="5">
   <tr>
<td colspan="2"  align="center"><b>Devi loggarti per poter lasciare la tua firma</b></td>
</tr>
<tr>
<td> Username: <input type="text" name="username"></td>
</tr>
<tr>
<td> Password: <input type="password" name="psw"></td>
</tr>
<tr>
<td align="center" colspan="2">
 <input type="submit" name"Login" value="Entra!"></form></td>
</tr>
</table>
</form><br>
</td>
</tr></table>
</body>
</html>

   <?php
   }
?>
<?php
echo"<br>";
function dbconnect() {
   mysql_connect("localhost", "root", "");
   @mysql_select_db("gd") or die ("Unable to select database");
}
?>

Adesso mi da login error.
Prima di inserire l'MD5 funzionava tutto bene.
Cosa c'è che non va secondo te?
Come mai la pss non sembra essere riconosciuta?

Grazie
risposto 8 anni fa
frankphp
X 0 X

A me sembra corretto. Prova a lanciare la SELECT di login da phpMyAdmin

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

A me sembra corretto. Prova a lanciare la SELECT di login da phpMyAdmin

 :bye:

da phpmyadmin?

e come gli invio le variabili?

risposto 8 anni fa
frankphp
X 0 X

dallo script PHP fai una echo della query che stai per eseguire, poi prendi la query visualizzata e la ricopi in phpmyadmin così la testi e cerchi di venirne a capo

risposto 8 anni fa
Gianni Tomasicchio
X 0 X
dallo script PHP fai una echo della query che stai per eseguire, poi prendi la query visualizzata e la ricopi in phpmyadmin così la testi e cerchi di venirne a capo

ho provato a fare :

echo $result;

e mi da un:

Resource id #3

che copio in phpmyadmin nello spazio sql relativa alla tabella in questione ma mi da un errore:

query SQL:

Resource id

Messaggio di MySQL: Documentazione

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Resource id' at line 1

che per me non significa niente.

Magari ho sbagliato qualcosa.

In ogni caso è strano perchè ho visto degli esempi in giro e in pratica è come dici tu:

si cripta la password che viene registrata e quando si richiama con il login si cripta di nuovo in modo che si possano confrontare (testo criptato con testo criptato) le 2 password.

Forse c'è qualcosa nella pagina di login che non va.

Aiutami!

Grazie

risposto 8 anni fa
frankphp
X 0 X

Resource id #3 è l'id di risorsa, un tipo di dato in php, non una query.

Questo vuol dire che stai facendo l'output della funzione mysql_query.

posta il codice così posso aiutarti

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

Resource id #3 è l'id di risorsa, un tipo di dato in php, non una query.

Questo vuol dire che stai facendo l'output della funzione mysql_query.

posta il codice così posso aiutarti

Il codice è quello che vedi nel primo posto.

C'è la funzione upload inserita in una pagina con la quale carico la pass criptata nel db (e qui tutto bene)

e poi sotto il codice di un'altra intera pagina, quella del login.

E' qui che c'è il problema. Mi da' sempre login error.

Strano poi che l'echo di $result mi dia sempre Resource id #3 per tutti gli utenti....

Grazie

risposto 8 anni fa
frankphp
X 0 X

errata corrige!

Il codice si trova nel mio terzo post 8)

risposto 8 anni fa
frankphp
X 0 X

ok appena ho un attimo mi occupo di aiutarti.

Nel caso facessi delle modifiche posta il codice altrimenti non ci troviamo :D

:bye:

risposto 8 anni fa
Andrea Turso
Andrea Turso
86
X 0 X

nessuna novità?

risposto 8 anni fa
frankphp
X 0 X

perdonami, mi sono perso qualche puntata, puoi fare un riassunto della situazione?

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Allora, il form di login deve puntare ad un script PHP del genere:

<?php
$utenti = array('marco'=>'password1', 'nicola'=>'password2','alberto'=>'password3');

if(key_exists($_POST['nome_utente'], $utenti) && $utenti[$_POST['nome_utente']] == $_POST['password']) {
   session_start();
   $_SESSION['uente_loggato'] == true;
}
?>

dove ho supposto che il form è dotato di due campi input di testo, di nome "nome_utente" e "password"

Per proteggere le pagine private devi iniziare gli script così:

<?php
session_start();
if(empty($_SESSION['uente_loggato'])) {
   die("Devi prima effettuare il login");
}
?>
risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Allora, il form di login deve puntare ad un script PHP del genere:

<?php
$utenti = array('marco'=>'password1', 'nicola'=>'password2','alberto'=>'password3');

if(key_exists($_POST['nome_utente'], $utenti) && $utenti[$_POST['nome_utente']] == $_POST['password']) {
   session_start();
   $_SESSION['uente_loggato'] == true;
}
?>

dove ho supposto che il form è dotato di due campi input di testo, di nome "nome_utente" e "password"

Per proteggere le pagine private devi iniziare gli script così:

<?php
session_start();
if(empty($_SESSION['uente_loggato'])) {
   die("Devi prima effettuare il login");
}
?>

 :o :o :-[

sinceramente a prima vista non ho capito la tua soluzione Gianni .

La protezione e il login della pagina funzionavano benissimo.

Il cambiamento che mi proponevo di realizzare era riferito solo alla password.

Volevo inserire nel db una pass criptata e che poi questa venisse letta regolarmente in fase di login.

Ma magari (come spesso capita :-[) non ho capito io..e ti chiedo scusa anticipatamente.

Ciao e grazie

risposto 8 anni fa
frankphp
X 0 X

e ci credo che non hai capito... ho sbagliato a postare!!!! :crazy: :crazy: :crazy:

chiedo venia :wallbash: :giveup: :lamo:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

e ci credo che non hai capito... ho sbagliato a postare!!!! :crazy: :crazy: :crazy:

chiedo venia :wallbash: :giveup: :lamo:

Niente figurati.

Aspetto non ti preoccupare.

Ciao e grazie

risposto 8 anni fa
frankphp
X 0 X

RISOLTO!!!!

Era una sciocchezza.

Avevi ragione che per te il codice era ok.

Infatti il problema era la lunghezza del campo del db.

facendo degli echo della pass criptata mi sono accorto che la pass corrispondeva con quella del db fino ad un certo punto perché verso la fine veniva troncata!! :crazy: :crazy: :crazy:.

Quindi ho modificato il campo della pass da varchar(30) a varchar(50) come avrebbe dovuto essere fin dall'inizio e le cose sono andate a posto.

Ciao e grazie a tutti per la pazienza :P

risposto 8 anni fa
frankphp
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda