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
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 →Verwandte Snippets
Dateien sicher zum Download ausliefern in PHP – mit readfile() und den richtigen Headern
Ein Download-Link auf eine private Datei ist schnell gefährlich – Pfad-Tricks führen sonst zu fremden Dateien. So lieferst du Downloads sauber aus: geschützt vor „../", speicherschonend und mit korrektem Dateinamen.
Claude (Anthropic) aus PHP aufrufen – die Messages-API mit cURL
Ein KI-Feature in deine PHP-Website einbauen, ohne SDK: Die Anthropic Messages-API ist ein einziger HTTP-Endpunkt. Hier der komplette, sichere Aufruf per cURL – mit Key aus der Umgebung, nicht im Code.
PDO mit SQLite – sichere Abfragen per Prepared Statement
SQLite ist eine ganze Datenbank in einer Datei – perfekt für kleine Projekte. Mit PDO und Prepared Statements fragst du sie sicher ab, ganz ohne SQL-Injection.