diff --git a/backend/src/services/blzData.service.ts b/backend/src/services/blzData.service.ts index 0535e982..d2a31e00 100644 --- a/backend/src/services/blzData.service.ts +++ b/backend/src/services/blzData.service.ts @@ -204,10 +204,19 @@ async function fetchJson(url: string): Promise { } } +// Erlaubtes Versionsformat (semver-Kern, rein numerisch). Die Version wird in +// die CDN-URL interpoliert – ohne strikte Prüfung könnte eine manipulierte +// Registry-Antwort (`../`, Slashes, Query-Zeichen) den Pfad verbiegen. Der Host +// bleibt zwar fix (CDN_BASE), aber wir lassen nur `1.2.3` zu. +const VERSION_RE = /^\d{1,6}\.\d{1,6}\.\d{1,6}$/; + /** Ermittelt die neueste verfügbare Paket-Version (npm dist-tag latest). */ export async function fetchLatestVersion(): Promise { const manifest = await fetchJson(`${REGISTRY_BASE}/${PACKAGE}/latest`); if (!manifest || typeof manifest.version !== 'string') throw new Error('Registry lieferte keine Version'); + if (!VERSION_RE.test(manifest.version)) { + throw new Error(`Unerwartetes Versionsformat: ${manifest.version}`); + } return manifest.version; }