Das Login-Thema ist nur ein kleiner Teil des Security-Problems. Du solltest dich auch über anderes Themen diesbezüglich informieren. Fehler in diesem Bereich sind leider die Regel.
Hier ein Link dazu:
http://flourishlib.com/docs/Security
Was mir spontan zur Passwort und Login-Sicherheit einfällt:
- HTTPS verwenden
- Neue Session-ID im Cookie des Clients beim Wechsel von HTTP auf HTTPS
- Neue Session-ID im Cookie des Clients beim Login
- Session-ID in der URL sollte ignoriert (redirect) werden, damit niemand dem Opfer eine Fremdsession unterschieben kann
- Guter Passworthash-Algorythmus (MD5 ist viel zu alt).
- Mehrfachverschlüsslung (Soll einfach nur die Codierungszeit erhöhen. Das stört den Normalnutzer wenig, der Angreifer der aber 1000de Passwörter encodieren will, braucht viel mehr Zeit)
- Passwort-Salz
- Dem Nutzer bei der Passworteingabe anzeigen wie sicher sein Passwort ist
- Keine zusätzlichen Informationen bei falscher Eingabe ausgeben (z.B. ob der Nutzer existiert oder nur das Passwort falsch ist)
- Auch wenn der Nutzer nicht existiert, solltest du das passwort codieren, damit ein Angreifer nicht durch Zeitmessung herausbekommt ob der Nutzer existiert oder nicht
- Passwort Vergessen: E-Mail an Nutzer mit URL, die nur wenige Minuten gültig ist. Dort kann er dann sein neues Passwort eingeben. Kein generiertes Passwort per E-Mail wo es ewig im Posteingang unverschlüsselt rummliegt.
- Formulare (generell, aber besomders in der geschützten Zone) müssen einen zufallsgenerierten Wert in einem hidden-Field beinhalten, der auch serverseitig an der Session gespeichert wird. Warum? Weil sonst ein Angreifer (der 0 Zugriff hat) einem Nutzer z.B. eine HTML-Email zuschicken kann, die versteckte Formulare beinhaltet. Der Zufallswert muss natürlich beim Empfangen der Formulardaten geprüft werden und bei Nichtübereinstimmung --> Fehlermeldung.
So, mehr fällt mir auf Anhieb nicht ein.
Aber wie du schon siehst --> großes Gebiet. Deswegen selber schlau machen.
Edit:
Passt auch eher nicht in die Datenbank-Sektion