Bei bcrypt (Default-Verfahren für
password_hash
)
DERZEIT das Default-Verfahren. Empfehlenswert ist es, nach dem Feststellen, dass ein korrektes Passwort übergeben wurde
password_verify ( $password , $hash )
mit
password_needs_rehash ( $hash , PASSWORD_DEFAULT )
zu prüfen, ob der der AKTUELLE Algorithmus benutzt wurde und, wenn nicht, mit
password_hash ( $password )
das übergebene Passwort neu gehascht zu speichern. Grund dafür: Der Algorithmus könnte ja mal verbessert werden. Dafür muss man aber auch sein PHP einem Update unterziehen...
Im Härtesten aller Fälle MÜSSEN die User sogar angeschrieben und zu einem Login aufgefordert werden und nach einer Wartefrist alle Accounts, bei denen das (und damit das Update) nicht erfolgte, zu LÖSCHEN.
@TS
Speichere unter keinen Umständen die Passwörter im Klartext. Nicht in der Session, nicht in der Datenbank, nirgendwo. Nur im Arbeitsspeicher (beim Login) ist das unumgänglich. Bau eine Passwort-Vergessen-Funktion ein. Es ist überhaupt kein Problem, erst eine Zufallszahl aus 6-16 Zeichen zu ermitteln, dann aus einem Wertebereich s mal zufällig ein Zeichen auszuwählen und daraus also einen String von 6 bis 16 Zeichen zu bauen, diesen mitsamt Verfallszeitunkt gehascht in der DB als temporären Passwort-Hash abzulegen und dem Benutzer einen Link zu senden, wo er sich einloggen und sein Passwort selbst neu setzen kann.
Eine Passwort-Ändern Funktion muss sowieso vorhanden sein...
Im Falle des Erinnerns (also bei einem erfolgreichen Login mit dem alten Passwort) KANN man dann das temporäre Passwort auch vernichten. Muss man aber nicht, man kann ja auch das "vergessene" Passwort löschen und den Benutzer bei Übermittlung des temporären Passwortes klar sagen, dass das alte Login nicht mehr funktioniert.
Wenn das Passort freilich an einem Counter (Schalter vor dem Admin-Stübchen) vergeben wird kann das Verfahren abgewandelt werden.