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 zum Schutz

Die Sicherheit von Webanwendungen beginnt mit der korrekten Implementierung der Authentifizierung (Überprüfung der Benutzeridentität) und der Autorisierung (Überprüfung seiner Zugriffsrechte). In PHP können diese Mechanismen sowohl mit integrierten Funktionen als auch mit spezialisierten Bibliotheken implementiert werden. In diesem Artikel werden wir die wichtigsten Konzepte erläutern, Codebeispiele schreiben und die besten Schutzpraktiken betrachten.



1. Grundlegende Konzepte: Authentifizierung vs. Autorisierung

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

  • Authentifizierung — der Prozess der Überprüfung, ob ein Benutzer derjenige ist, der er vorgibt zu sein (normalerweise durch Login und Passwort).
  • Autorisierung — der Prozess der Bestimmung, welche Ressourcen oder Aktionen einem authentifizierten Benutzer zur Verfügung stehen (z. B. die Rolle "admin" oder "user").

Fehler bei der Implementierung einer dieser Phasen können zu Datenlecks oder unbefugtem Zugriff führen.



2. Basisauthentifizierung über Sessions (natives PHP)

Die gebräuchlichste Methode ist die Verwendung von Sessions. PHP bietet den integrierten Mechanismus $_SESSION. Betrachten wir ein einfaches Beispiel.



Schritt 1: Anmeldeformular (login.php)

<?phpsession_start();?><!DOCTYPE html><html><head>    <title>Anmeldung auf der Website</title></head><body>    <form method="POST" action="login.php">        <label>Benutzername:</label>        <input type="text" name="username" required>        <label>Passwort:</label>        <input type="password" name="password" required>        <button type="submit" name="login">Anmelden</button>    </form></body></html>


Schritt 2: Verarbeitung der Anmeldung (gleiche login.php)

<?phpsession_start();require_once 'db.php'; // Verbindung zur Datenbank

if (isset($_POST['login'])) { $username = trim($_POST['username']); $password = $_POST['password'];

// 1. Prepared Statement zum Schutz vor SQL-Injection $stmt = $pdo->prepare("SELECT id, password_hash FROM users WHERE username = ?"); $stmt->execute([$username]); $user = $stmt->fetch();

// 2. Passwortprüfung mit password_verify if ($user && password_verify($password, $user['password_hash'])) { // Authentifizierung erfolgreich $_SESSION['user_id'] = $user['id']; $_SESSION['logged_in'] = true; header("Location: dashboard.php"); exit; } else { $error = "Ungültiger Benutzername oder Passwort"; }}?>


Schritt 3: Autorisierungsprüfung auf einer geschützten Seite

<?phpsession_start();if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) {    header("Location: login.php");    exit;}// Zugriff erlaubtecho "Willkommen, Benutzer #" . htmlspecialchars($_SESSION['user_id']);?>


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

PHP bietet sichere Funktionen für die Arbeit mit Passwörtern:

  • password_hash($password, PASSWORD_BCRYPT) — erstellt automatisch einen Hash mit Salt.
  • password_verify($password, $hash) — überprüft das Passwort gegen den Hash.

Beispiel für die Benutzerregistrierung:

<?php$password = "user123";$hash = password_hash($password, PASSWORD_BCRYPT);// $hash in der Datenbank speichern$stmt = $pdo->prepare("INSERT INTO users (username, password_hash) VALUES (?, ?)");$stmt->execute([$username, $hash]);?>

Wichtig: Verwenden Sie niemals md5() oder sha1() für Passwörter – sie sind veraltet und leicht zu knacken.



4. Rollenbasierte Autorisierung (Role-Based Access Control)

Zur Rechteverwaltung

Empfehlungen