cf8c6c84c2
M2-Reste – XSS-Strings + Mass-Assignment-Settings noch in DB:
Idempotentes Cleanup-Script prisma/cleanup-xss-and-mass-assignment.ts.
Strippt HTML aus Customer/User-String-Feldern, entfernt AppSettings
ohne Whitelist-Eintrag. Wird im entrypoint.sh nach Migrations + Seed
einmalig pro Container-Start ausgeführt.
User-Update + password-Feld:
password aus USER_UPDATABLE_FIELDS raus (CREATE behält es), neuer
dedizierter Endpoint POST /api/users/:id/password mit Audit-Log
"Passwort … durch Admin gesetzt" und Komplexitäts-Check.
JS-Runtime-Fehler-Leak:
ORM_LEAK_PATTERNS um TypeError/ReferenceError/SyntaxError/RangeError +
"Cannot read properties of undefined/null" + "is not a function/
defined" erweitert. Greift im globalen res.json()-Wrapper.
POST /contracts substring-Crash:
Controller validiert type/customerId, sonst 400. generateContractNumber
fängt nullish type ab (Fallback "CON").
Seed-Admin-Passwort:
Default "admin" verletzte 12-Zeichen-Policy. Jetzt 16-char
Zufallspasswort (alle 4 Klassen garantiert via Fisher-Yates) oder per
SEED_ADMIN_PASSWORD-ENV überschreibbar. BCRYPT-Cost 12 (war 10).
Passwort wird einmalig in stdout ausgegeben mit Warnung.
AppSettings-Whitelist: companyName + defaultEmailDomain ergänzt
(kamen aus seed.ts, in 1. Whitelist vergessen).
Live-verifiziert:
- POST /contracts {} → 400 "Vertrags-Typ erforderlich" (vorher
TypeError-Stack)
- PUT /users/6 {password:"HackerPW2026!"} → 200 aber Login mit altem
PW geht weiter
- POST /users/6/password mit "kurz" → 400 mit Komplexitäts-Fehlern
- Cleanup-Script: planted XSS bereinigt, hackerSetting+debugMode
entfernt, idempotenter Re-Lauf
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
41 lines
1.1 KiB
Bash
41 lines
1.1 KiB
Bash
#!/bin/sh
|
||
set -e
|
||
|
||
echo "=== OpenCRM Startup ==="
|
||
|
||
# Wait for database to be ready
|
||
echo "Waiting for database connection..."
|
||
MAX_RETRIES=30
|
||
RETRY_COUNT=0
|
||
|
||
while ! nc -z db 3306 2>/dev/null; do
|
||
RETRY_COUNT=$((RETRY_COUNT + 1))
|
||
if [ $RETRY_COUNT -ge $MAX_RETRIES ]; then
|
||
echo "Error: Database not available after $MAX_RETRIES attempts"
|
||
exit 1
|
||
fi
|
||
echo " Attempt $RETRY_COUNT/$MAX_RETRIES - waiting..."
|
||
sleep 2
|
||
done
|
||
echo "Database is ready!"
|
||
|
||
# Run migrations
|
||
echo "Running database migrations..."
|
||
npx prisma migrate deploy
|
||
|
||
# Seed database if RUN_SEED is set (first install)
|
||
if [ "$RUN_SEED" = "true" ]; then
|
||
echo "Seeding database..."
|
||
npx tsx prisma/seed.ts
|
||
fi
|
||
|
||
# Einmal-Bereinigung für Pentest-Reste (Runde 12): XSS-Strings aus
|
||
# Customer/User-Feldern entfernen + unbekannte AppSettings löschen.
|
||
# Idempotent – läuft bei jedem Container-Start ohne Risiko.
|
||
echo "Running data cleanup..."
|
||
npx tsx prisma/cleanup-xss-and-mass-assignment.ts || echo " (Cleanup übersprungen, nicht-kritisch)"
|
||
|
||
# Start the application
|
||
echo "Starting OpenCRM server..."
|
||
exec node dist/index.js
|