Volkers Mobirise Blog

In diesem Blog findest du Anleitungen, Tipps und Beispiele
für Mobirise Webseiten. Themen sind unter anderem
PHP in Mobirise, dynamische Inhalte, Blogsysteme,
CMS Erweiterungen und eigene Mobirise Blöcke.

PHP Login Scripte

PHP Login-Skripte: hardcodiert vs. sicher (Hash, Sessions, Redirects)

In diesem Artikel schauen wir uns typische PHP-Login-Ansätze an: von „schnell mal hardcodiert“ bis zu sauberem Passwort-Hashing, Sessions, Redirects und den häufigsten Stolperfallen.


1) Warum „hardcodierte“ Logins zwar funktionieren, aber gefährlich sind

Ein hardcodierter Login bedeutet meistens: Benutzername und Passwort stehen direkt im Code, z. B.: „wenn $_POST['user'] = admin und $_POST['pass'] = geheim, dann login ok“. Das ist für schnelle Tests praktisch – für echte Projekte aber problematisch.

  • Keine Skalierung: Du kannst nicht sinnvoll mehrere Benutzer verwalten.
  • Änderungen nur per Code-Deploy: Passwort ändern = Code ändern = Risiko.
  • Häufig Klartext-Passwörter: Wenn jemand Zugriff auf Dateien/Backup bekommt, ist alles offen.
  • Fehleranfällig: Oft fehlen Rate-Limits, Session-Schutz, Redirect-Sicherheit usw.

Hardcoding kann okay sein für lokale Prototypen, interne Tools im eigenen Netz (mit Vorsicht), oder wenn du Zugriff zusätzlich absicherst (z. B. per Basic Auth / IP-Whitelist). Für alles andere: lieber gleich „richtig“ bauen.

2) Passwort-Hashing: der wichtigste Schritt Richtung Sicherheit

In einem sicheren Login speicherst du Passwörter niemals im Klartext, sondern als Hash. In PHP nutzt man dafür password_hash() beim Setzen/Ändern des Passworts und password_verify() beim Login-Vergleich.

Der große Unterschied: Selbst wenn deine Datenbank geleakt wird, stehen dort keine echten Passwörter – nur Hashes, die (je nach Stärke) schwer zurückzurechnen sind. Außerdem enthalten moderne Hashes einen eingebauten Salt und passende Parameter.

// Passwort setzen (z.B. bei Registrierung/Passwort ändern)
$hash = password_hash($plainPassword, PASSWORD_DEFAULT);

// Login prüfen
if (password_verify($inputPassword, $hashFromDatabase)) {
    // ok
}

Wichtig: Niemals selbst “eigene Hash-Logik” basteln (z. B. md5 oder sha1). Das ist heute nicht mehr zeitgemäß und in vielen Fällen unsicher.

3) Sessions: Wie PHP „eingeloggt bleiben“ organisiert

Das Login-Formular ist nur der Start. Entscheidend ist, wie du danach den Zustand „User ist eingeloggt“ speicherst. Dafür nutzt man in klassischen PHP-Apps meist Sessions.

Typisch ist: Nach erfolgreichem Login setzt du z. B. $_SESSION['user_id'] oder $_SESSION['is_logged_in']. Auf jeder geschützten Seite prüfst du diese Variable.

// Ganz oben in jeder Datei, die Sessions nutzt:
session_start();

// Beim Login-OK:
$_SESSION['user_id'] = $userId;
$_SESSION['role'] = $role; // optional

Session-Sicherheit (kurz & praxisnah)

  • Session-ID regenerieren nach Login (Schutz gegen Session-Fixation).
  • Logout sollte Session leeren und idealerweise zerstören.
  • Cookies sicher setzen (HttpOnly, Secure bei HTTPS, SameSite).
// Nach erfolgreichem Login:
session_regenerate_id(true);

4) Redirects: „Nach Login weiterleiten“ – richtig gemacht

Redirects sind super praktisch: Nach Login geht’s ins Dashboard, nach Logout zurück zur Login-Seite, und wer nicht eingeloggt ist, wird automatisch umgeleitet.

In PHP ist das meist header('Location: ...'). Wichtig dabei:

  • Immer vor Ausgabe: Keine Leerzeichen/HTML vorher, sonst „headers already sent“.
  • Immer beenden: Nach dem Redirect exit; aufrufen.
  • Open Redirect verhindern: Nicht blind eine URL aus $_GET übernehmen.
// Beispiel: nicht eingeloggt => Login
if (empty($_SESSION['user_id'])) {
    header('Location: login.php');
    exit;
}

Weiterleitung zur ursprünglich gewünschten Seite

Ein Klassiker: User will /admin.php öffnen, ist aber nicht eingeloggt. Du leitest auf login.php um – und nach Login soll er wieder zurück. Das macht man oft über einen redirect-Parameter. Aber: nur erlaubte Ziele zulassen!

// Beispiel-Idee (Konzept):
// login.php?redirect=admin.php
// Nach Login: nur relative, erlaubte Pfade akzeptieren (Whitelist)

5) Typische Fehler in Login-Skripten (und wie du sie vermeidest)

  • Klartext-Passwörter (in DB oder Code) statt password_hash().
  • SQL-Injection, wenn Login-Daten unsicher in SQL gebaut werden – Lösung: Prepared Statements (PDO / MySQLi).
  • Keine Brute-Force-Bremse: fehlende Limits, kein Delay, keine Sperre.
  • Session nicht regeneriert nach Login.
  • Redirect ohne exit – Code läuft weiter und macht ggf. doch noch Ausgabe.
  • Zu genaue Fehlermeldungen („Benutzer existiert nicht“ vs. „Passwort falsch“) – besser neutral bleiben.

6) Fazit

Hardcodierte Logins sind schnell, aber für echte Anwendungen fast immer ein Risiko. Ein solides Login in PHP besteht aus: Passwort-Hashing (password_hash/verify), Sessions (inkl. session_regenerate_id), und sauberen Redirects (mit exit und ohne Open-Redirect-Lücken).

© 2025 Volker Niederastroth

© Copyright 2026 Volker Niederastroth

Besucherstatistik

Besucher online: 3

Besucher heute: 54

Besucher diese Woche: 1549

Besucher diesen Monat: 4296

Gesamtbesucher: 30934

🟢 Online: 👤 3 | 🤖 2
ahrefs, anthropic