'/', 'httponly' => true, 'samesite' => 'Lax']); session_start(); } function csrf_token(): string { if (empty($_SESSION['csrf']) || !is_string($_SESSION['csrf'])) { $_SESSION['csrf'] = bin2hex(random_bytes(32)); } return $_SESSION['csrf']; } function csrf_pruefen(mixed $token): bool { return is_string($token) && isset($_SESSION['csrf']) && is_string($_SESSION['csrf']) && hash_equals($_SESSION['csrf'], $token); } function csrf_verbrauchen(): void { unset($_SESSION['csrf']); } function db(): PDO { $pfad = getenv('KONTAKT_DB'); if ($pfad === false || $pfad === '') { $pfad = __DIR__ . '/kontakt.sqlite'; } $pdo = new PDO('sqlite:' . $pfad, null, null, [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, ]); $pdo->exec('CREATE TABLE IF NOT EXISTS nachrichten ( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, email TEXT NOT NULL, nachricht TEXT NOT NULL, oeffentlich INTEGER NOT NULL DEFAULT 0, erstellt TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP )'); return $pdo; } function h(string $text): string { return htmlspecialchars($text, ENT_QUOTES | ENT_SUBSTITUTE, 'UTF-8'); } function kopf(string $titel): string { return '