Autorisierung und Authentifizierung in PHP: So schützen Sie Ihre Website
Sicherheit ist einer der Schlüsselaspekte jeder Webanwendung. In PHP werden Authentifizierung (Überprüfung der Benutzeridentität) und Autorisierung (Festlegung seiner Zugriffsrechte) mit integrierten Werkzeugen implementiert: Sessions, Cookies, Passwort-Hashing und Datenbankarbeit. In diesem Artikel behandeln wir den gesamten Zyklus der Erstellung eines Systems für Login, Registrierung und Zugriffsbeschränkung in PHP.
1. Grundlegende Konzepte
- Authentifizierung — der Prozess der Überprüfung, ob ein Benutzer der ist, der er vorgibt zu sein (normalerweise durch Login und Passwort).
- Autorisierung — die Überprüfung, ob ein authentifizierter Benutzer berechtigt ist, eine bestimmte Aktion auszuführen (z. B. Zugriff auf das Admin-Panel).
- Session — ein temporärer Datenspeicher auf dem Server, der über eine eindeutige ID (Session-ID) mit einem bestimmten Besucher verknüpft ist.
- Passwort-Hashing — die Umwandlung eines Passworts in einen irreversiblen String zur sicheren Speicherung in der Datenbank.
2. Benutzerregistrierung
Der erste Schritt ist die Erstellung eines Registrierungsformulars und eines Handlers. Das Passwort wird niemals im Klartext gespeichert – wir verwenden die Funktion password_hash().
2.1. Registrierungsformular (register.php)
<form method="post" action="register_handler.php"> <input type="text" name="username" placeholder="Benutzername" required> <input type="email" name="email" placeholder="E-Mail" required> <input type="password" name="password" placeholder="Passwort" required> <button type="submit">Registrieren</button></form>2.2. Registrierungs-Handler (register_handler.php)
<?php// Verbindung zur Datenbank (PDO)$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$username = $_POST['username'];$email = $_POST['email'];$password = password_hash($_POST['password'], PASSWORD_BCRYPT); // hashen
$stmt = $pdo->prepare("INSERT INTO users (username, email, password) VALUES (?, ?, ?)");$stmt->execute([$username, $email, $password]);
header('Location: login.php');?>Verwenden Sie
PASSWORD_BCRYPT— es generiert automatisch einen Salt und gilt als ausreichend sicher.
3. Authentifizierung (Anmeldung)
Bei der Anmeldung vergleichen wir das eingegebene Passwort mit dem Hash aus der Datenbank mit Hilfe von password_verify() und erstellen eine Session.
3.1. Anmeldeformular (login.php)
<form method="post" action="login_handler.php"> <input type="text" name="username" placeholder="Benutzername" required> <input type="password" name="password" placeholder="Passwort" required> <button type="submit">Anmelden</button></form>3.2. Anmelde-Handler (login_handler.php)
<?phpsession_start();$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$username = $_POST['username'];$password = $_POST['password'];
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");$stmt->execute([$username]);$user = $stmt->fetch();
if ($user && password_verify($password, $user['password'])) { // Authentifizierung erfolgreich $_SESSION['user_id'] = $user['id']; $_SESSION['username'] = $user['username']; $_SESSION['role'] = $user['role']; // für die Autorisierung header('Location: dashboard.php');} else { echo "Ungültiger Benutzername oder Passwort";}?>4. Autorisierung (Zugriffsbeschränkung)
Nach der Authentifizierung erhält der Benutzer eine Rolle (z. B. 'user', 'admin', 'moderator'). Die Autorisierung überprüft diese Rolle, bevor Aktionen ausgeführt werden.
4.1. Einfache Rollenprüfung
<?phpsession_start();
// Prüfen, ob der Benutzer authentifiziert ist Auch in der Bibliothek
Event Bus und das Observer-Pattern in JavaScript (Node.js) — Erstellung flexibler ereignisgesteuerter Systeme
Tokio für Rust: Vollständige Anleitung mit Beispielen
Autorisierung und Authentifizierung in Kotlin: Ktor, JWT und Spring Security