'; } public static function validate(?string $token): bool { if ($token === null || $token === '') { return false; } $sessionToken = (string) ($_SESSION[self::TOKEN_KEY] ?? ''); if ($sessionToken === '') { return false; } return hash_equals($sessionToken, $token); } public static function assertValidFromRequest(bool $jsonResponse = true): void { $token = TaskCertRequest::postString('csrf_token'); if ($token === '') { $token = (string) ($_SERVER['HTTP_X_CSRF_TOKEN'] ?? ''); } if (!self::validate($token)) { TaskCertResponse::error('CSRF validation failed', 419, $jsonResponse); } } }