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.inioder übersession_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)
Auch in der Bibliothek
PhpSpreadsheet für PHP: Komplettguide mit Beispielen
Kotlin-Anwendungsüberwachung: Bibliotheken und Tools zur Leistungsverfolgung
Arbeiten mit Excel in PHP: Bibliotheken PhpSpreadsheet und OpenSpout