Autorisierung und Authentifizierung in PHP: Vollständiger Leitfaden mit Beispielen

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Autorisierung und Authentifizierung in PHP: Von den Grundlagen bis zur Sicherheit



In der modernen Webentwicklung sind Authentifizierung (Überprüfung der Benutzeridentität) und Autorisierung (Überprüfung der Zugriffsrechte) grundlegende Sicherheitsmechanismen. In PHP werden diese Prozesse durch die Arbeit mit Sessions, Cookies, Passwort-Hashing und Tokens realisiert. In diesem Artikel behandeln wir alle wichtigen Aspekte, die für die Erstellung eines sicheren Anmeldesystems auf der Bildungswebsite pythonlib.ru erforderlich sind.



1. Grundlegende Konzepte: Authentifizierung vs. Autorisierung



Bevor wir Code schreiben, ist es wichtig, die beiden Begriffe klar zu unterscheiden:



  • Authentifizierung — der Prozess der Überprüfung, ob ein Benutzer der ist, der er vorgibt zu sein (Login + Passwort, Biometrie, Token).
  • Autorisierung — die Bestimmung, welche Ressourcen und Aktionen einem authentifizierten Benutzer zur Verfügung stehen (Rollen: Admin, Moderator, Benutzer).


In PHP wird die Authentifizierung normalerweise über Sessions oder JWT durchgeführt, die Autorisierung über die Überprüfung von Rollen in der Datenbank.



2. Passwort-Hashing: Speichern Sie Passwörter niemals im Klartext



PHP bietet integrierte Funktionen für sicheres Passwort-Hashing. Verwenden Sie password_hash() und password_verify() — das ist der moderne Standard.



// Benutzerregistrierung$password = $_POST['password'];$hashedPassword = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);

// $hashedPassword in der DB speichern$sql = "INSERT INTO users (email, password_hash) VALUES (?, ?)";$stmt = $pdo->prepare($sql);$stmt->execute([$_POST['email'], $hashedPassword]);


// Überprüfung beim Login$inputPassword = $_POST['password'];$storedHash = $user['password_hash']; // aus der DB

if (password_verify($inputPassword, $storedHash)) { // Authentifizierung erfolgreich $_SESSION['user_id'] = $user['id'];} else { // Falsches Passwort}


3. Session-Verwaltung in PHP



Sessions sind die gebräuchlichste Methode zur Verfolgung authentifizierter Benutzer. PHP generiert automatisch eine eindeutige Session-ID und speichert sie in einem Cookie.



// Session starten (immer am Anfang des Skripts)session_start();

// Nach erfolgreichem Login$_SESSION['user_id'] = $user['id'];$_SESSION['user_role'] = $user['role']; // für die Autorisierung$_SESSION['logged_in'] = true;

// Authentifizierungsprüfung auf geschützten Seitenfunction requireAuth() { if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) { header('Location: /login.php'); exit; }}

// Abmeldensession_destroy();setcookie(session_name(), '', time() - 3600, '/');


4. Session-Sicherheit: Schutz vor Angriffen



Um Session-Hijacking und Session-Fixation zu verhindern, verwenden Sie die folgenden Maßnahmen:



  • Regeneration der Session-ID nach dem Login:


session_regenerate_id(true); // löscht die alte Session


  • Überprüfung von User-Agent und IP (optional, erhöht aber die Sicherheit):


$_SESSION['user_agent'] = $_SERVER['HTTP_USER_AGENT'];

// Bei jeder Anfrageif ($_SESSION['user_agent'] !== $_SERVER['HTTP_USER_AGENT']) { session_destroy(); die('Verdächtige Aktivität');}


  • Setzen von Flags für das Session-Cookie in php.ini oder über session_set_cookie_params():


session_set_cookie_params([    'lifetime' => 0,           // bis zum Schließen des Browsers    'secure' => true,          // nur HTTPS    'httponly' => true,        // nicht aus JavaScript zugänglich    'samesite' => 'Strict'     // Schutz vor CSRF]);session_start();


5. JWT (JSON Web Tokens)

Empfehlungen