Newsgroup: it.comp.www.php
Titolo: md5 client e server?

Salve a tutti,
non so se la domanda è proprio inerente al gruppo o meno, in caso 
contrario consigliatemi.
In un sistema semplice di registrazione utenti e login che sto scrivendo 
  mi sono trovato ad affrontare il "problema" password.
Io memorizzo le password in formato md5 nel database e poi al momento di 
login confronto l'md5 del valore inserito e il valore in database.
Ora mi pongo alcune domande:
1)al momento della registrazione l'md5 lo ottengo con javascript e non 
php visto che altrimenti la password viaggia in chiaro da client a 
server. è corretta questo modo di procedere?
2)anche al momento del confronto per il login ottengo l'md5 della 
password applicando js sul form. anche qui, è corretto?
3)a sto punto md5 lato php non lo uso proprio e tutto questo basarmi sul 
js non mi da' molta sicurezza. come potrei combinare entrambe le 
tecnologie? eventualmente considerando anche la possibilità di chi ha il 
js disattivato.
grazie mille per qualsiasi spunto di riflessione

> "problema" password.
Se vuoi scambiare dati in modo sicuro tra client e server.....la parola è 
SSL.
rob4you 

 
si ok questo è chiaro...diciamo che il mio discorso è fatto senza usare ssl.

 grazie mille per qualsiasi spunto di riflessione
Se qualcuno riesce a intercettare la password che il client manda al server 
già criptata, automaticamente riesce ad entrare. Basta inviare al server la 
stringa di 32 caratteri: lui non sa se è stata criptata tramite javascript o 
è stata inviata direttamente così... quindi il malintenzionato è come se 
sapesse la password vera e propria.
E' una cosa inutile dal punto di vista della TUA sicurezza, un pò più utile 
è per la sicurezza del cliente nel caso in cui usasse una password comune a 
più servizi.
A questo punto ti conviene una doppia mandata di md5: una lato client e 
l'altra lato server (cosa che aumenta di poco la tua sicurezza, giusto nel 
caso in cui si riesce ad accedere al db... ma se il malintenzionato continua 
a usare lo sniffing, l'unica soluzione è l'ssl).
Un piccolo controllo del tipo:
******
$pass= $_POST['password'];
if(strlen($pass)<32) $pass=md5($pass);
******
dovrebbe trasformare lato server ciò che avrebbe dovuto fare il client e non 
l'ha fatto, probabilmente a causa del js disattivato.
ciao,
Luca(riello)
 

[cut]
Scusate gli errori di sintassi... andavo di fretta :p 

 l'ha fatto, probabilmente a causa del js disattivato.
e se, al contrario, il js è abilitato la lunghezza sarà 32 e non sarà 
fatta la seconda passata!
mi piacerebbe capire qual è la migliore soluzione.
ciao e grazie

> con js disabilitato
Beh....non si può avere la moglie ubriaca e la botte piena! :-) E' ovvio che 
se js è disabilitato:
1) o non permetti a utenti con js disabilitato di accedere al tuo sito
2) oppure rinunci al md5 lato js, e quindi, in assenza di ssl, mandi i dati 
in chiaro.
un'alternativa, sempre comunque soggetta alle stessissime problematiche, di 
cui si era parlato qualche giorno fa su questo ng, è la criptazione a chiave 
pubblica (con js)/privata (con php). In pratica, js cripta utilizzando la 
chiave pubblica fornitagli, invia il messaggio al server, e php la decripta 
con la sua chiave privata, e volendo applica gli algoritmi di cifratura che 
vuole (oppure li fa applicare direttamente al db).
rob4you
www.outofmind.eu

 fatta la seconda passata!
No la seconda passata la fai comunque... quello che ti ho scritto era per 
criptare la pass nel caso il js fosse disabilitato.
Per mandare in palla un sistema del genere, uno dovrebbe scrivere una pass 
lunga 32 caratteri.. alquanto improbabile. Mal che vada fai un ulteriore 
controllo: due campi input di cui uno è riempito solo se il js è abilitato e 
da lì fai il controllo.
Ma imho il gioco non vale la candela. Fai salti mortali per una sicurezza 
che rimane blanda.
ciao,
Luca(riello)