MWCodebymw.de ↗
PHP

Passwörter sicher speichern mit password_hash()

Niemals Passwörter im Klartext oder mit MD5 speichern. Mit password_hash() und password_verify() macht PHP das Richtige von selbst – inklusive Salt und späterem Rehash.

Wenn du in PHP einen Login baust, ist die wichtigste Regel: Passwörter werden niemals im Klartext gespeichert und niemals mit md5() oder sha1(). PHP bringt dafür seit Version 5.5 alles mit – password_hash() erzeugt einen sicheren Hash inklusive zufälligem Salt, password_verify() prüft ihn.

Beim Registrieren hashen

<?php
// PASSWORD_DEFAULT wählt automatisch den aktuell besten Algorithmus (derzeit bcrypt).
$hash = password_hash($_POST['password'], PASSWORD_DEFAULT);

// $hash speicherst du in der Datenbank – ein Salt musst du NICHT selbst verwalten,
// es steckt bereits im Hash-String.
$stmt = $db->prepare('INSERT INTO users (email, pass_hash) VALUES (?, ?)');
$stmt->execute([$_POST['email'], $hash]);

Beim Login prüfen

<?php
$stmt = $db->prepare('SELECT id, pass_hash FROM users WHERE email = ?');
$stmt->execute([$_POST['email']]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

if ($user && password_verify($_POST['password'], $user['pass_hash'])) {
    // Passwort stimmt – Session starten.
    session_regenerate_id(true);
    $_SESSION['uid'] = $user['id'];
} else {
    // Bewusst dieselbe, neutrale Meldung für "E-Mail unbekannt" und "Passwort falsch".
    $error = 'E-Mail oder Passwort ist falsch.';
}

Automatisch nachziehen

Ein oft vergessener Feinschliff: Wird der empfohlene Algorithmus stärker, kannst du beim erfolgreichen Login prüfen, ob der gespeicherte Hash veraltet ist, und ihn transparent erneuern.

<?php
if (password_needs_rehash($user['pass_hash'], PASSWORD_DEFAULT)) {
    $new = password_hash($_POST['password'], PASSWORD_DEFAULT);
    $db->prepare('UPDATE users SET pass_hash = ? WHERE id = ?')
       ->execute([$new, $user['id']]);
}

Genau so setze ich Logins in den Websites und CMS-Systemen um, die ich für Selbstständige baue. Wenn du eine sichere Website mit Login brauchst, findest du mich auf bymw.de.

Quellen

#password_hash#Sicherheit#Login#Hashing#PHP

Du brauchst mehr als ein Snippet?

Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.

Projekt anfragen →