From f3668b8a5a258e3d1c040284a9f3a47aa4030214 Mon Sep 17 00:00:00 2001 From: duffyduck Date: Thu, 13 Aug 2026 13:49:32 +0200 Subject: [PATCH] Magic-Byte-Seed: aus Prod-Image ausschliessen + Prod-Riegel Der Pentester-Helfer soll nicht ins Produktions-Image und darf nie gegen Prod laufen: - .dockerignore schliesst backend/scripts/seed-magic-byte-test.ts aus dem Build-Context aus -> Datei liegt nicht mehr im Prod-Container (bleibt im Repo fuer Dev/Staging-Checkout). - Script bricht bei NODE_ENV=production im "create"-Modus hart ab (exit 1); "cleanup" bleibt erlaubt, damit man immer aufraeumen kann. Verifiziert: create@production -> Abbruch exit 1; cleanup@production laeuft. Co-Authored-By: Claude Opus 4.8 --- .dockerignore | 4 ++++ backend/scripts/seed-magic-byte-test.ts | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/.dockerignore b/.dockerignore index 69eb0b37..accc348c 100644 --- a/.dockerignore +++ b/.dockerignore @@ -37,6 +37,10 @@ Thumbs.db __tests__ coverage +# Pentester-/Dev-Helferscripte gehören NICHT ins Prod-Image (nur lokal/Staging +# via Repo-Checkout ausführen). Erzeugen sonst nur toten Ballast im Container. +backend/scripts/seed-magic-byte-test.ts + # Docker files in wrong location docker-compose.yml diff --git a/backend/scripts/seed-magic-byte-test.ts b/backend/scripts/seed-magic-byte-test.ts index e7e07376..e5d00bd4 100644 --- a/backend/scripts/seed-magic-byte-test.ts +++ b/backend/scripts/seed-magic-byte-test.ts @@ -55,6 +55,18 @@ function absoluteFilePath(): string { } async function create(customerIdArg?: number): Promise { + // Harter Prod-Riegel: dieses Script legt eine Fake-Bankkarte + getarnte + // Datei an – das darf NIE gegen Produktion laufen (weder versehentlich noch + // absichtlich). `cleanup` bleibt erlaubt, damit man immer aufräumen kann. + if (process.env.NODE_ENV === 'production') { + console.error( + 'ABBRUCH: "create" ist bei NODE_ENV=production deaktiviert. Dieser ' + + 'Pentester-/Test-Helfer gehört nur nach Dev/Staging. (Zum Aufräumen ist ' + + '"cleanup" weiterhin erlaubt.)', + ); + process.exit(1); + } + // Ziel-Customer bestimmen (Default: erster vorhandener Kunde). const customer = customerIdArg ? await prisma.customer.findUnique({ where: { id: customerIdArg }, select: { id: true, customerNumber: true } })