Sicherheit in PHP
Erste Schritte: Sicherheit in PHP: Sessions, Cookies, CSRF, XSS, Passwort‑Hashing
Webanwendungen verarbeiten sensible Daten – daher ist ein sicheres Handling von Sitzungen, Cookies
und Benutzereingaben essenziell. Dieses Tutorial fasst die wichtigsten Schutzmechanismen zusammen
und zeigt jeweils kurze PHP‑Beispiele nur in <pre>‑Blöcken.
1. Sessions – Absichern & richtig starten
- session_start() vor jeglicher Ausgabe aufrufen.
- Session‑ID regenerieren nach Login (session_regenerate_id(true)), um Fixation zu verhindern.
- Cookie‑Flags – httponly (kein JS‑Zugriff) & secure (nur HTTPS).
0, 'path' => '/', 'secure' => true, // nur über HTTPS übertragen 'httponly' => true, // kein Zugriff via JS 'samesite' => 'Lax' // CSRF‑Basisschutz ]); session_start(); // Nach erfolgreichem Login session_regenerate_id(true); // alte ID ungültig $_SESSION['userid'] = $userId; ?>
2. Cookies sicher setzen
Vermeide Klartext‑Infos in Cookies; nutze Flags wie secure, httponly und samesite.
setcookie( 'remember_token', $token, // zufälliger Hash, kein Klartext‑PW [ 'expires' => time()+60*60*24*30, 'path' => '/', 'secure' => true, 'httponly' => true, 'samesite' => 'Strict' ] );
3. CSRF‑Schutz (Cross‑Site Request Forgery)
CSRF verhindert man, indem man pro Session ein zufälliges Token generiert
und als verstecktes Feld in jedem state‑changing Formular mitsendet.
4. XSS‑Schutz (Cross‑Site Scripting)
Grundregel: Escape Output. Gib Benutzereingaben nie roh zurück.
Für HTML‑Attribute, URLs oder JavaScript‑Kontexte gelten weitere spezialisierte Escaper
(z. B. FILTER_SANITIZE_URL, CSP‑Header).
5. Passwort‑Hashing mit password_hash()
- Verwende nie md5 / sha1 – nutze password_hash (BCRYPT / ARGON2).
- Speichere nur den Hash, nie das Klartext‑Passwort.
- Zum Prüfen: password_verify.
prepare("INSERT INTO users (user, pass) VALUES (:u, :p)") ->execute([':u' => $user, ':p' => $hash]); // Login $stmt = $pdo->prepare("SELECT pass FROM users WHERE user=:u"); $stmt->execute([':u' => $user]); $hash = $stmt->fetchColumn(); if ($hash && password_verify($password, $hash)) { echo "Login OK"; } else { echo "Falsche Daten"; } ?>
6. Weitere Schutzmaßnahmen
- Content‑Security‑Policy (CSP)‑Header gegen XSS.
- Strict‑Transport‑Security (HSTS) – erfordert HTTPS.
- Prepared Statements (PDO / mysqli) gegen SQL‑Injection.
- Rate‑Limiting & Captcha bei Login/Forms.
Fazit
Sichere PHP‑Apps bauen auf mehreren Ebenen:
- Session‑Handling mit sicheren Cookie‑Flags.
- CSRF‑Tokens für alle gefährlichen POST/PUT/DELETE‑Aktionen.
- Konsequentes htmlspecialchars gegen XSS.
- Starkes Passwort‑Hashing via password_hash.
Kombiniert mit Prepared Statements, CSP und HTTPS machst du deine Anwendung
robust gegenüber den meisten gängigen Angriffsvektoren.