setStatus(403) ->getBody() ->write("403 - Forbidden") ->send(); return false; } if($request->getMethod() !== 'GET' && !$this->validateCSRFToken($request)) { $response ->setStatus(419) ->getBody() ->write("419 - Session expired or invalid CSRF token.") ->send(); return false; } return true; } /** * Prüft, ob das CSRF-Token gültig ist. * * @param Request $request Das aktuelle Request-Objekt * @return bool true, wenn das Token gültig ist, sonst false */ public static function validateCSRFToken(Request $request): bool { $token = $request->getPost('_csrf_token') ?? ''; return hash_equals($_SESSION['_csrf_token'] ?? '', $token); } /** * Generiert und gibt ein CSRF-Token zurück. * * @return string Das generierte oder vorhandene CSRF-Token */ public static function generateCSRFToken(): string { if(!isset($_SESSION['_csrf_token'])) { $_SESSION['_csrf_token'] = bin2hex(random_bytes(32)); } return $_SESSION['_csrf_token']; } }