Rolfi: password_verify Passwortabfrage mit Datenbank

Beitrag lesen

Servus,

ich bin gerade am überlegen, welchen Vorteil password_hash für eine Passwortabfrage hat. Ich muss zugeben, ich bin nämlich ein Wenig darüber verwirrt.

Ein Passwort, aber mehrere Hashes: $2y$10$akOaFIUxv9iG584mdXynWOS71IDl9OHDk89nInfX6MsnzfOI5VEPI $2y$10$O5qYpEBJJ3AHLoXIl3/LyONJa8OTkZR0LspxWG2nJnmvPsLyWSQ9a $2y$10$fxOD9pwfUMbLIsgHHdZV8e1IKj1pXqarMS8lWXKJq5QfHhVGQZ10m $2y$10$lxIB3U4hHaIkuifXHq1q7OPMmgKvZY.Jqd1TchXxxZoY8mGt7Taj2 $2y$10$77hysniRyc/r5ORJ0wImXORHDYsajIWUN/rKa.XojKX46CXklNbSi

Ein direkter Vergleich ist in der Datenbank also nicht möglich. Zudem muss ich erst den Hash aus der Datenbank holen um dann mit password_verify zu testen, ob das Passwort stimmt. Danach muss ich eine erneute Datenbankabfrage stellen um die Daten aus der Datenabnk zu holen.

Ist es irgendwie möglich, das password_verify direkt in einer SQL Abfrage zu verwenden? Ich kenne jetzt keine Möglichkeit die erlauben würde, in einer SQL Abfrage das zu benutzen, da der Hash aus der Datenbank ja noch garnicht "geladen" wurde. Das macht die Abfrage ja erst. Ansonsten müsste ich alles in einem Array zwischenspeichern und das Array erst freigeben, wenn das Passwort stimmt. Oder eine zweite Abfrage starten. Ich frage mich aber nach der Performance, direkt zwei Abfragen und einen Haufen mehr Code. Vorher habe ich abgefragt und direkt die Userdaten die man benötigte in eine Session geschrieben.

Außerdem Sicherheit. Ich habe oben 5 mögliche Hashes und sogar weitaus mehr für ein und das selbe Passwort. Abzüglich der ersten 7 Zeichen die immer gleich sind, ist das eine Länge von 53 Zeichen. Und diese Zeichen können öfter das gleiche Passwort repräsentieren, obwohl sie verschieden sind. Ist dann nicht die Wahrscheinlichkeit höher, das Passwort zu knacken, weil man mehr Möglichkeiten hat? sha256 gilt als "unsicher", hat aber 11 Zeichen mehr. Der Hash ist für das Passwort immer eindeutig. Es heißt aber, es könnten Inhalte generiert werden, die den gleichen Fingerabdruck enthalten, also ein Hash theoretisch mehrere Passwörter repräsentieren könnte. Im Gegenzug habe ich aber bei password_hash mehrere Hashes, die das Passwort repräsentieren wobei fraglich ist, ob andere Passwörter bei einer solch hohen Spreizung nicht auch einer dieser vielen Hashes repräsentieren.

Für mich erscheint password_hash unsicherer, andererseits wird empfohlen es vor sha256, md5 etc zu nutzen. Kann mich jemand aufklären?

MfG, Rolfi