Diese Seite bezieht sich auf meine MySQL-Klasse für PHP. Das Problem und die Lösung ist aber unabhängig von dieser Klasse.
Die hier verwendeten Hashverfahren (SHA1 oder MD5) sind nicht mehr sicher und dienen nur als Beispiel.
Wenn das Hashen des Passworts von der Datenbank übernommen wird, so hat dies gleich mehrere Nachteile. Das kleinere Problem ist, dass der Hash vom Datenbankserver berechnet wird. Die weitaus schlimmeren Probleme sind, dass der Query mit dem Passwort im Klartext in der Prozessliste (SHOW PROCESSLIST) und auch in mehreren Logdateien auftauchen können. So kann der Administrator des Systems Passwörter von Benutzern auch unbeabsichtigt im Klartext lesen oder die im Falle der Slow-Query-Log von Personen ausgewertet werden, die eigentlich nur Datenbankabfragen optmieren aber keine solch kritischen Daten wie Passwörter mitlesen sollen.
Sollte Statement-Based-Replikation verwendet werden, so bekommen auch alle anderen Datenbankserver die Queries mit den Passwörtern im Klartext zugesendet (wenn ein Benutzer das Passwort ändert, da bei Replikation meist nur Schreibzugriffe repliziert werden) - was das Risiko vergrössert, da Queries an noch mehr Stellen angezeigt und geloggt werden können.
Hier wird das Passwort direkt auf dem Server berechnet, auf dem sich der Benutzer befindet und bereits der berechnete Hash an den Datenbankserver übermittelt. Damit taucht das Passwort nicht in der Prozessliste oder verschiedenen Logdateien des Datenbankservers auf.
Dieses Dokument ist unter einer Creative Commons-Lizenz lizenziert.
Dokument wurde zuletzt am Samstag den 23. Juli 2011 um 21:45 Uhr aktualisiert.