From b87a2a3d08b20f6dc98aea7dece61354c8da44cf Mon Sep 17 00:00:00 2001 From: duffyduck Date: Mon, 18 May 2026 20:24:33 +0200 Subject: [PATCH] fix: Cleanup im echten Entrypoint + idempotente Migration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Beim Audit der Container-Pipeline zwei Bugs gefunden: 1) backend/docker-entrypoint.sh (= der wirklich ausgeführte Entrypoint laut Dockerfile) ruft jetzt das Cleanup-Script auf. Der Cleanup- Aufruf hing bisher fälschlich in docker/entrypoint.sh – ein alternatives Setup, das von der Standard-Compose-Konfiguration NICHT genutzt wird. Folge: das Cleanup ist auf prod nie gelaufen. 2) Migration 20260516173552_portal_password_must_change nutzt jetzt `ADD COLUMN IF NOT EXISTS`. Auf prod-DBs, die zwischen den Runden per `prisma db push` updated wurden (z.B. weil der erste Build mit `db push` provisioniert war), existiert die Spalte bereits. Ohne IF NOT EXISTS würde migrate deploy beim Hochziehen einer neueren Version mit "Duplicate column" abbrechen. MariaDB ≥ 10.0.2 + MySQL ≥ 8.0.27 unterstützen IF NOT EXISTS für ALTER TABLE ADD COLUMN – beides ist in unserer Compose-Konfig abgedeckt. Co-Authored-By: Claude Opus 4.7 (1M context) --- backend/docker-entrypoint.sh | 8 ++++++++ .../migration.sql | 5 ++++- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/backend/docker-entrypoint.sh b/backend/docker-entrypoint.sh index 90197313..9e9e5f5f 100755 --- a/backend/docker-entrypoint.sh +++ b/backend/docker-entrypoint.sh @@ -122,5 +122,13 @@ if [ "$RAN_SEED" = "true" ] && [ -d /app/factory-defaults-builtin ] \ || echo "[entrypoint] Factory-Defaults-Seed fehlgeschlagen – ignoriert" fi +# Datenbereinigung: XSS-Strings aus Customer/User-Stringfeldern strippen, +# nicht-whitelisted AppSettings entfernen, Pentest-Marker melden (Default +# nur warnen; CLEANUP_PURGE_PENTEST=true löscht markierte Records). +# Idempotent – läuft bei jedem Container-Start ohne Risiko. +echo "[entrypoint] Datenbereinigung läuft…" +npx tsx prisma/cleanup-xss-and-mass-assignment.ts \ + || echo "[entrypoint] Cleanup übersprungen / fehlgeschlagen – nicht kritisch" + echo "[entrypoint] Starte Backend…" exec "$@" diff --git a/backend/prisma/migrations/20260516173552_portal_password_must_change/migration.sql b/backend/prisma/migrations/20260516173552_portal_password_must_change/migration.sql index 0961b0c9..75ea01fc 100644 --- a/backend/prisma/migrations/20260516173552_portal_password_must_change/migration.sql +++ b/backend/prisma/migrations/20260516173552_portal_password_must_change/migration.sql @@ -1,2 +1,5 @@ -- AlterTable -ALTER TABLE `Customer` ADD COLUMN `portalPasswordMustChange` BOOLEAN NOT NULL DEFAULT false; +-- IF NOT EXISTS: macht das Hochziehen auf prod-DBs sicher, die das Feld +-- über `prisma db push` schon erhalten haben (vor dem Migrations-Workflow). +-- MariaDB unterstützt das seit 10.0.2, MySQL 8 ebenfalls. +ALTER TABLE `Customer` ADD COLUMN IF NOT EXISTS `portalPasswordMustChange` BOOLEAN NOT NULL DEFAULT false;