PHP 5 bringt neue Password Hashing API – PHP 5.4.7 und 5.3.17 sind veröffentlicht

14 September 2012 Kein Kommentar Autor: Jürgen (jdo)

PHP Logo 150x150RFC für eine einfacher benutzbare Passwort Hashing API für PHP5 wurde akzeptiert. Allerdings schreiben die Entwickler, dass der Vorschlag sehr technisch ist und man die meisten darin beschriebenen Beispiele nicht nutzen sollte – das gibt Vertrauen bezüglich Passwörtern :) … Deswegen gibt es in diesem Eintrag auf github einen besseren Einblick.

Eigentlich sollte jeder Entwickler wissen, dass sie Passwörter-Hashing zusammen mit bcrypt nutzen sollen. Allerdings verwende immer noch eine überraschend große Anzahl an Entwicklern md5 oder sha1. Als Grund dafür machen die PHP-Entwickler aus, dass die crypt()-API sehr kompliziert zu benutzen sein und für Programmierfehler prädestiniert ist. Durch das Erzeugen einer neuen und einfacheren API, hofft man, dass mehr Entwickler bcrypt benutzen.

Wie man einen Password-Hash erzeugt

Die neue Methode ist sehr einfach: $hash = password_hash($password, PASSWORD_DEFAULT);

Damit erzeugst Du einen Passwort-Hash unter der Benutzung des Standard-Algorithmus (derzeit bcrypt), des Standard Load-Faktors (auch Fill-Faktor genannt, derzeit 10) und einem automatisch generiertem Salt. Wer die Standard-Werte nicht einsetzen möchte, kann Algorithmus und Load-Faktor selbst angeben: $hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);

Verifizieren von Passwörtern

Das ist genauso einfach, wie ein Passwort erzeugen. Die Entwickler geben folgendes beispiel dafür an:

  1. <?php
  2. // $password from user, $hash from database
  3. if (password_verify($password, $hash)) {
  4.     // password valid!
  5. } else {
  6.     // wrong password :(
  7. }

Salt und Algorithmus sind Teil des Hash und Du musst diese nicht separat angeben.

Rehashing Passwörter

Mit fortlaufender Zeit möchte man vielleicht den Passwort-Hash-Algorithmus der Load-Faktor ändern – denkbar ist auch, dass PHP die Standards ändert. In diesem Fall sollten neue Konten mit den neuen Optionen erzeugt und existierende Passwörter beim Anmeldevorgang der neuen Prozedur ebenfalls unterzogen werden. Dies funktioniert nur beim Anmelden, da man das existierende Passwort für einen Rehash benötigt. Als Fallbeispiel zeigen die Entwickler das so:

  1. <?php
  2. function password_verify_with_rehash($password, $hash) {
  3.     if (!password_verify($password, $hash)) {
  4.         return false;
  5.     }
  6.  
  7.     if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
  8.         $hash = password_hash($password, PASSWORD_DEFAULT);
  9.  
  10.         // update hash in database
  11.     }
  12.  
  13.     return true;
  14. }

Das obige Codeschnippsel hält die Hashes auf dem neuesten Stand mit dem PHP-Standard. Natürlich lassen sich auch hier eigene Optionen, wie weiter oben beschrieben, anwenden.

Die API wird in PHP 5.5 einließen. Entwickler können aber schon eine PHP-Implementierung der selben API verwenden. Sobald ein Upgrade auf PHP 5.5 erfolgt, wird sich diese API selbst deaktivieren und die vorhandene in 5.5 verwenden.

PHP 5.4.7 und 5.3.17

Und weil wir schon bei PHP sind: PHP 5.4.7 und 5.3.17 wurden gestern ausgegeben. Diese Versionen bessern insgesamt 20 Bugs aus. Detaillierte Informationen gibt es in den entsprechenden Changelogs. Den Quellcode findest Du wie immer im Download-Bereich der Projektseite und Binärdateien für Windows gibt es hier.



Du kannst gerne Deinen Senf zu diesem Beitrag geben: Hier geht es zu den Kommentaren


Schreiben macht durstig! Eine kleine Erfrischung kann daher nie schaden. Wem dieser freie Artikel gefallen hat, der darf mir gerne einen frisch gezapften Hopfen-Tee ausgeben (Paypal - der Spenden-Knopf
oder bitcoin - Adresse: 1NacVNwcLLePUVv8uSafu5Ykdwh8QyDfgK). Ich freue mich über jede noch so kleine Spende. Vielen Dank und Prost!
 Alle Kommentare als Feed abonnieren

Antworten