Hallo,
ich habe mir ein PHP-Skript geschrieben, dass die Userdaten in einer Datenbank und einer .htpasswd Datei speichert um einen Passwortschutz zu realisieren, wobei es auch eine Funktion gibt, um das Passwort zu ändern. Dabei habe ich zum Test das Passwort beim ändern nur um einen Buchstaben am Ende erweitert, der Zugang ging jedoch mit beiden Passwörtern. Das Passwort wurde in verschlüsselter Form jedoch sowohl in der Datenbank als auch in der .htpasswd Datei geändert. Dabei ist mir Folgendes aufgefallen:
Die Funktion crypt() in PHP unterscheidet anscheinend nur die ersten sechs Buchstaben des Passwortes. Ich habe zum Test selbiges mit dem Passwort "Testpasswort" ausprobiert und den Salt 10 verwendet.
Es führte zu folgendem Ergebnis:
Testpasswort -> 103reQTSU5Qqc
Testpasswor -> 103reQTSU5Qqc
Testpasswo -> 103reQTSU5Qqc
Testpassw -> 103reQTSU5Qqc
Testpass -> 103reQTSU5Qqc
Testpas -> 10AtsgTKNozyw
Auch "Testpassword" ergab 103reQTSU5Qqc und so weiter...
Und auch das anhängen beliebiger Zeichen brachte keinen Unterschied..
z.B. Testpassworts458971 -> 103reQTSU5Qqc
Selbst bei einem Salt von z.B. "sfdjjasj" kam mit verschiedenen Passwort jeweils dasselbe Ergebnis, in dem Fall "sfwxrg4Ks4LbA".
Ist das sonst schonmal irgendjemandem aufgefallen?? Das heißt das ein Tippfehler im hinteren Teil des wortes nichts ausmacht. Was sagt ihr dazu?? Ich halte es für eine bedeutende Sicherheitslücke ;)
MfG,
Christian