è proprio così

md5 se utilizzato solo lato server evita di tenere le password in chiaro nel db ma non evita il passaggio in chiaro client>server

un metodo efficace è sviluppare una challenge in JavaScript (lato client)
ovviamente il sistema deve funzionare sia con che senza

con il passaggio della password è SEMPRE cifrato (escluso durante la registrazione)

senza il passaggio della password è SEMPRE in chiaro

il sistema non è complesso

tramite js eviti che la form venga inviata e cominci una serie di botta e risposta col server (tramite XMLHTTP, ajax per intenderci)

client > inizio autenticazione (invia username)
server > invia un salt (una stringa alfanumerica casuale) e la salva nel db
client > fa md5(md5(password)+salt) e invia il tutto al server
server > fa md5(password_nel_db_già_in_formato_md5+salt_salvat o_nel_db) e verifica siano uguali (se lo sono accetta l'autenticazione)
client > riceve risposta negativa positiva e si comporta di conseguenza

se js è disattivato user e password vengono inviati tramite la form in chiaro

---

se ti interessa durante agosto pubblicherò un articolo completo sull'argomento con esempio pratico

domani parto per le vacanze, spero comunque di averti dato abbastanza spunti

ciao