Wie zu verwenden password_hash
Kürzlich habe ich versucht zu implementieren, die eigene Sicherheit auf ein log in script habe ich zufällig im internet. Nach kämpfen, zu versuchen, zu lernen, wie mein eigenes script to generate a salt für jeden user, stolperte ich über password_hash.
Aus, was ich verstehe (basiert auf das Lesen auf dieser Seite: http://php.net/manual/en/faq.passwords.php), Salz ist bereits automatisch in der Zeile, wenn Sie password_hash. Ist das wahr?
Andere Frage die ich hätte wäre, wäre es nicht schlau, habe 2 Salze? Eine direkt in der Datei in der DB? So, wenn jemand gefährdet das Salz in der DB, haben Sie immer noch direkt in die Datei? Ich lese hier, dass die Speicherung von Salzen ist nie eine kluge Idee, aber es immer verwirrt mich, was die Menschen damit gemeint.
InformationsquelleAutor der Frage Josh Potter | 2015-05-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit
password_hash
ist die empfohlene Methode zum speichern von Passwörtern. Trennen sich nicht, Sie zu DB und Dateien.Sagen wir mal wir haben die folgenden input:
Ich nicht überprüfen die Eingabe nur für die Zwecke der das Verständnis des Konzepts.
Sie die erste hash das Passwort, dies zu tun:
Dann finden Sie in der Ausgabe:
Wie Sie sehen können, es ist gehasht. (Ich nehme an, Sie haben diese Schritte).
Nun speichern Sie diese hashed_password in Ihrer Datenbank, Und dann sagen wir mal, wenn ein Benutzer fragt, zu melden. Überprüfen Sie die Passwort-Eingabe mit diesem hash-Wert in der Datenbank, dies zu tun:
Offizielle Referenz
InformationsquelleAutor der Antwort Akar
Ja Sie verstehen es richtig, die Funktion password_hash() erzeugt ein Salz auf seine eigene, und enthält es in der resultierenden hash-Wert. Die Speicherung der salt in der Datenbank ist vollkommen korrekt, es macht seinen job, auch wenn bekannt ist.
Den zweiten Salz, die Sie erwähnt (die, die in einer Datei gespeichert), ist tatsächlich eine Chili-oder eine server-side-Taste. Wenn Sie fügen Sie es vor Vermischung (wie das Salz), dann fügen Sie den Pfeffer. Es gibt einen besseren Weg, aber Sie könnten berechnen Sie zuerst den hash, und danach verschlüsseln (zwei-Weg) den Hashwert mit einem server-side-Taste. Dies gibt Ihnen die Möglichkeit, um den Schlüssel zu ändern, wenn nötig.
Im Gegensatz zu den Salz -, dieser Schlüssel sollte geheim gehalten werden. Menschen oft mischen Sie es und versuchen, sich zu verstecken das Salz, aber es ist besser, lassen Sie das Salz seine Aufgabe erfüllen, und fügen Sie das Geheimnis mit einem Schlüssel.
InformationsquelleAutor der Antwort martinstoeckli
Ja, es ist wahr. Warum zweifelst du die php-faq, die auf die Funktion? 🙂
Das Ergebnis der Ausführung
password_hash()
hat vier Teile:So wie Sie sehen können, wird der Hashwert ist ein Teil davon.
Sicher, könnten Sie ein zusätzliches Salz für eine zusätzliche Ebene der Sicherheit, aber ganz ehrlich, ich denke, das ist übertrieben, in einem normalen php-Anwendung. Die Standard-bcrypt-Algorithmus gut ist, und das optional blowfish ist wohl noch besser.
InformationsquelleAutor der Antwort Joel Hinz
Nie mit md5() für den Schutz Ihrer Kennwort, auch mit dem Salz, es ist immer gefährlich!!
Machen Sie Ihre Passwort-gesichert mit aktuellen Hash-algorithmen wie folgt.
Für den Abgleich mit der Datenbank verschlüsselt, Passwort und Benutzer eingegeben Passwort verwenden Sie die unter-Funktion.
Wenn Sie möchten, verwenden Sie Ihre eigenen Salz, verwenden Sie Ihre benutzerdefinierte Funktion generiert für die gleiche, Folgen Sie einfach dem unten, aber ich nicht empfehlen, da Es gefunden ist veraltet in der neuesten PHP-Versionen.
Lesen Sie diese http://php.net/manual/en/function.password-hash.phpbevor Sie folgenden code verwenden.
Hoffe, dies alles hilft!!
InformationsquelleAutor der Antwort Mahesh Yadav
Gibt es einen deutlichen Mangel an Diskussion über die rückwärts-und vorwärts-Kompatibilität eingebaute PHP Passwort-Funktionen. Vor allem:
crypt()
und sind von Natur aus rückwärts-kompatibel mitcrypt()
-format hashes, auch wenn Sie veraltet und/oder unsichere hash-algorithmen.password_needs_rehash()
und ein bisschen Logik in die Authentifizierungs-workflow können halten Sie Ihre hashes up-to-date mit aktuellen und zukünftigen algorithmen mit potenziell null zukünftige änderungen am workflow. Hinweis: Jeder string, der nicht mit dem angegebenen Algorithmus wird vorgemerkt für die Notwendigkeit einer Neuauflage, einschließlich nicht-crypt-kompatibel-hashes.ZB:
Ausgabe:
Als ein letzter Hinweis, da kann man nur re-hash des Passworts eines Benutzers bei der Anmeldung sollten Sie prüfen, "Sonnenuntergang" unsicher legacy-hashes zum Schutz Ihrer Benutzer. Damit meine ich, dass nach einer bestimmten Karenzzeit entfernen Sie alle unsicher [zB: blanken MD5/SHA/sonst schwach] - hashes und Ihre Benutzer verlassen sich auf Ihre Anwendung, die Passwort-reset-Mechanismen.
InformationsquelleAutor der Antwort Sammitch
Klasse Passwort vollständige code:
InformationsquelleAutor der Antwort Dimitris Maniatis
Habe ich gebaut, eine Funktion, die ich benutze die ganze Zeit für Passwort-Validierung und erstellen von Passwörtern, z.B. um Sie zu speichern in einer MySQL-Datenbank. Es verwendet einen zufällig generierten salt, das ist viel sicherer als die Verwendung einer statischen Salz.
InformationsquelleAutor der Antwort Gerrit Fries