Be un discorso sulla sicurezza sarebbe davvero lungo.
Sicuramente sono d'accordo in generale sull'uso di https in modo che le pass non girino mai per la rete in chiaro, altrimenti il resto è inutile.
Poi suggerisco posso suggerire qualche tematica da approfondire navigando su BigG.
Per esempio, quando un utente si registra, salvare la password con un algoritmo di criptazione non reversibile e ricorsivo. Per esempio bcrypt o il più recente "scrypt". Non potrei inserire link, ma qui se ne parla un pò:
stackoverflow.com/questions/4433216/password-encryption-pbkdf2-using-sha512-x-1000-vs-bcrypt?rq=1
Poi sarebbe un'ottima idea obbligare l'utente ad inserire una password da almeno 8 caratteri con:
- almeno un simbolo
- almeno una lettera maiuscola
- almeno una lettera minuscola
- almeno una cifra numerica
Poi per ulteriore sicurezza potresti aggiungere alla password una SALT, cioè una stringa random (e quando parlo di random intendo estratta con la funzione openssl_random_pseudo_bytes su php) e avviare l'algoritmo di criptazione con dentro la salt. Ne devi generare uno per ogni utente, salvarti la salt nel database insieme al nome utente ed alla pass. In questo modo se ti rubano il db degli utenti ci metteranno una vita a fare un brute force sui dati.
Si potrebbe aggiungere anche un authtoken al form per verificare che i dati in arrivo siano stati inseriti nello stesso form generato inizialmente dal server. Salvi l'authtoken in sessione mandi il form al client con l'authtoken in un text hidden e lo ricontrolli se corrisponde quando il client reinvia i dati al server. Se sei in una connessione HTTPs serve meno.
In alternativa all'HTTPs, non è molto elegante, ma puoi avviare una negoziazione RSA tra client e server con javascript lato client e php lato server. La negoziazione porta client e server a scegliere una chiave comune per una normale criptazione simmetrica che è più veloce. A quel punto per ogni comunicazione riservata client-server cripti e decripti con la chiave negoziata.
Infine, ma non ultimo, direi di mettere tutti i file con le class di gestione del login e database in una cartella sul server all'esterno dell'area raggiungibile dal web.
Spero di "essere stato spiegato"