Jump to content
Froxlor Forum
  • 0

Login funktioniert nicht


martinr

Question

Hallo,

 

habe vor Kurzem Froxlor auf einem Debian 8 mit PHP7 installiert. Soweit so gut, bis auf Let's Encrypt läuft auch alles (habe gesehen, dass es hier viele Threads zu gibt, aber noch keine Zeit gehabt, dem nachzugehen).

 

Nun ist es geschehen, dass ich mich auf einmal nicht mehr einloggen kann (mit meinem Admin).

 

Habe 2 Mal das Passwort zurückgesetzt (Link via Mail), nichts. Schaue ich in den Code und folgendes passiert: (in validatePasswordLogin)

$pwd_check = crypt($password, $pwd_salt);

Liefert immer "*0" (ohne Anführungszeichen). Habe $pwd_salt ausgelesen und lokal crypt damit ausgeführt, bei jedem Passwort kriege ich dieses Ergebnis.

 

$pwd_salt hat den Wert "$2y$07$".

 

Als Verschlüsselungsmethode ist BLOWFISH gewählt und password_verify mit dem in der Datenbank gespeicherten Wert liefert auch das gewünschte Ergebnis

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

Ich glaube, so wie das mit crypt aktuell implentiert ist, fehlt der salt - die Methode funktioniert auf keiner PHP-Version laut 3v4l (Link).

 

Sehe gerade nicht, wie man den Salt aus dem Hash auslesen kann (letzte Zeichen fehlt, hier Salt "..yxc", im Hash nur "..yx", also geht substr(..)+22 nicht). Aber wenn man den Salt weiß, funktioniert es so (Link) oder eben - wie auch von der Doku vorgeschlagen - mittels password_hash / password_verify. Kann mir das die Tage gerne mal genauer ansehen und evtl. einen Pull Request machen dann.

 

Gerade im StackOverflow-Chat gewesen (Chat-Log):

crypt($pwd, $hashed_pwd) === $hashed_pwd

gilt, man kann also den kompletten Hash nehmen und braucht das str_replace(substr(strrchr( garnicht (nur getestet mit Blowfish). Generell wird aber zu password_verify() geraten anstatt normalen == Vergleich. Und für Kompabilität gibt es password_compat

Link to comment
Share on other sites

so ganz ohne bezug auf unsere code ist es schwer dir hier zu folgen.
 
- warum sollte ein salt fehlen? -> wir rufen beim erstellen crypt() mit zweitem Parameter auf, also dem $salt
 
- klar kann man den salt aus dem hash auslesen, siehe: https://github.com/Froxlor/Froxlor/blob/master/lib/functions/validate/function.validatePasswordLogin.php#L51
 
- password_hash / password_verify fallen raus, PHP >=5.5

 

- password_comapt -> sieht ganz nett aus, könnte man sich anschauen

 

- das crypt als salt den kompletten passwort-hash frisst kannte ich nicht, werd ich mal testen müssen

Link to comment
Share on other sites

Okay, verstehe, dass das wirr war. Versuche es deutlicher auszudrücken: (habe das nur für den Blowfish-Fall getestet)

 

Ein gehashtes Passwort sieht zB folgendermaßen aus: "$2y$10$4YfB.o57aeHFiFKqZYBT0e1vSc3/Rp/hyeX0G11RtzjHusRqfOyBi".

$pwd_salt = str_replace(substr(strrchr($pwd_hash, "$"), 1), "", $pwd_hash);

Das ist Froxlor-Code (wie du verlinkt hast), $pwd_salt hat nun den Wert "$2y$10$". Wenn man nun (Froxlor-Code)

$pwd_check = crypt($password, $pwd_salt);

macht, kommt immer "*0" raus ("failure string"). Das liegt daran, dass "$2y$10$" nicht den ganzen Salt enthält. Zitat aus der Doku

 

CRYPT_BLOWFISH - Blowfish hashing with a salt as follows: "$2a$", "$2x$" or "$2y$", a two digit cost parameter, "$", and 22 characters from the alphabet "./0-9A-Za-z"

 

Man hat also $2y$ ("alles gut") und 10$ (cost parameter und $), aber nicht die 22 characters, die den Rest des Salts bilden.

 

Leider scheint folgendes nicht zu funktionieren

substr(strrchr($pwd_hash, "$")+22

da (bei meinen Tests) der letzte character des Salts nicht im gehashten Passwort war (zumindest nicht offensichtlich).

 

Lösung wäre, wie vorgeschlagen folgendes

$pwd_check = crypt($password, $pwd_hash);

Oder (bevorzugt) das benutzen von password_verify()

 

---

Kann das gerne als Bug posten, bevor das hier aus dem Ruder läuft.

Link to comment
Share on other sites

Muss erstmal bis Samstag für einen Kunden durchpowern, dann schaue ich mir das an. Bin nicht so Community-/Open Source-erfahren (1 PR auf GitHub bisher ..), würde wenn ich es habe nochmal auf dich/euch zurückkommen, damit ich alles richtig & nichts kaputt mache

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.



×
×
  • Create New...