3) Die Lösung: CSRF-Token (ein geheimes Extra-Feld)
Ein CSRF-Token ist ein zufälliger Wert, den du beim Anzeigen eines Formulars erzeugst
und in der Session speicherst. Beim Absenden muss derselbe Token wiederkommen.
Eine fremde Webseite kennt dieses Token nicht – also kann sie keinen gültigen Request bauen.
Genau das verhindert CSRF.
Prinzip: Token generieren
session_start();
// Token nur erstellen, wenn noch keiner da ist (oder pro Formular)
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
$token = $_SESSION['csrf_token'];
Dann fügst du ihn in dein Formular ein:
<form method="post">
<input type="hidden" name="csrf_token" value="<?= htmlspecialchars($token, ENT_QUOTES, 'UTF-8') ?>">
<!-- weitere Felder -->
<button type="submit">Speichern</button>
</form>