diff --git a/README.md b/README.md index c66ffc11..f0732e59 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,8 @@ Web-basiertes CRM-System für Kundenverwaltung mit Verträgen (Energie, Telekommunikation, KFZ-Versicherung). +**Version: 1.1.0** ([Changelog](#changelog)) + ## Features - **Kundenverwaltung**: Privat- und Geschäftskunden mit Stammdaten @@ -11,6 +13,9 @@ Web-basiertes CRM-System für Kundenverwaltung mit Verträgen (Energie, Telekomm - **Zähler**: Strom-/Gaszähler mit Zählerstandhistorie - **Rechnungen**: Rechnungsverwaltung für Energieverträge mit Dokumenten-Upload - **Vertrags-Cockpit**: Dashboard zur Überwachung offener Aufgaben (fehlende Dokumente, Rechnungen) +- **Auto-Vertragsstatus**: Lieferbestätigung-Upload setzt `DRAFT` → `ACTIVE` (mit Vertragsbeginn), + Kündigungsbestätigung-Upload setzt `ACTIVE` → `CANCELLED` (mit Datum), + nightly-Cron setzt `ACTIVE`-Verträge mit abgelaufenem `endDate` auf `EXPIRED` - **Verträge**: - Energie (Strom, Gas) - Telekommunikation (DSL, Glasfaser, Mobilfunk, TV) @@ -20,7 +25,14 @@ Web-basiertes CRM-System für Kundenverwaltung mit Verträgen (Energie, Telekomm - **Email-Provisionierung**: Automatische E-Mail-Weiterleitung bei Plesk/cPanel/DirectAdmin - **Berechtigungssystem**: Admin, Mitarbeiter, Nur-Lesen, Kundenportal - **Verschlüsselte Zugangsdaten**: Portal-Passwörter AES-256-GCM verschlüsselt -- **DSGVO-Compliance**: Audit-Logging, Einwilligungsverwaltung, Datenexport, Löschanfragen +- **DSGVO-Compliance**: Audit-Logging mit Hash-Chain-Integritätsprüfung, + Einwilligungsverwaltung, Datenexport, Löschanfragen +- **Sicherheits-Monitoring**: Realtime-Logging von Login-Fehlversuchen, IDOR-Abwehr, + SSRF-Blocks, JWT-Manipulation; Threshold-Detection (Brute-Force, IDOR-Probing) mit + Sofort-E-Mail-Alerts und stündlichem Digest – siehe Einstellungen → Monitoring +- **Production-Hardening**: 10 dokumentierte Hardening-Runden inkl. CORS, Helmet, + IDOR-Schutz, Rate-Limiting, SSRF/DNS-Rebinding-Block, Per-File-Ownership-Check, mehr + in [docs/SECURITY-HARDENING.md](docs/SECURITY-HARDENING.md) - **Developer-Tools**: Datenbank-Browser und interaktives ER-Diagramm ## Tech Stack @@ -140,6 +152,39 @@ Nach dem Seed sind folgende Zugangsdaten verfügbar: - **E-Mail:** admin@admin.com - **Passwort:** admin +> **Wichtig:** Vor dem ersten Production-Deployment das Default-Passwort sofort +> ändern und Secrets rotieren – siehe [Production-Deployment](#production-deployment). + +## Production-Deployment + +Vor dem öffentlichen Schalten der Instanz muss in der Production-`.env`: + +```env +NODE_ENV=production + +# Pflicht-Rotation – per `openssl rand` neu generieren! +JWT_SECRET=$(openssl rand -hex 64) # min. 32 Zeichen +ENCRYPTION_KEY=$(openssl rand -hex 32) # genau 64 Hex-Zeichen + +# Backend nur lokal lauschen lassen, public-Verkehr läuft über Reverse-Proxy +LISTEN_ADDR=127.0.0.1 + +# Bei separatem Frontend-Host: erlaubte Origins +CORS_ORIGINS=https://crm.deine-domain.de +``` + +Plus: + +- **Reverse-Proxy** (Nginx/Plesk) so konfigurieren, dass `X-Forwarded-For` hart auf + die echte Client-IP gesetzt wird (nicht nur angefügt) – sonst Rate-Limit-Bypass möglich. +- **Default-Admin-Passwort ändern** (admin@admin.com / admin). +- **Manuelle Test-Checkliste** aus [docs/TESTING.md](docs/TESTING.md) einmal komplett + durchklicken. +- **Monitoring konfigurieren**: Einstellungen → Sicherheits-Monitoring → Alert-E-Mail + hinterlegen, Test-Alert senden, Digest aktivieren. +- Vollständige Hardening-Story + restliche Trade-offs: + [docs/SECURITY-HARDENING.md](docs/SECURITY-HARDENING.md) + ## Developer-Tools aktivieren Die Developer-Tools (Datenbankstruktur, ER-Diagramm) sind standardmäßig für Admins verfügbar. Falls der Menüpunkt nicht erscheint: @@ -1105,6 +1150,50 @@ ersetzt. - **Versionskontrolle**: Die entpackten JSON-Dateien unter Versionskontrolle stellen (außerhalb von `backend/factory-defaults/`, da der Ordner gitignored ist) +## Changelog + +### 1.1.0 (2026-05-01) + +**Production-readiness** – die Version, die wirklich öffentlich gehen darf. + +- 🛡 **Security-Hardening**: 10 Runden statisches + dynamisches Audit, vollständig + dokumentiert in [docs/SECURITY-HARDENING.md](docs/SECURITY-HARDENING.md) + (CORS/Helmet/JWT, IDOR-Schutz an 30+ Endpoints, Mass-Assignment-Whitelists, + Zip-Slip, Path-Traversal, Login-Timing-Side-Channel, XFF-Rate-Limit-Bypass, + Customer-Liste-Leak, SSRF + DNS-Rebinding, Per-File-Ownership statt + freiem `/api/uploads`, JWT-Logout, Audit-Log-Hash-Chain). +- 🚨 **Sicherheits-Monitoring**: neue `SecurityEvent`-Tabelle + Hooks an Login, + Logout, Rate-Limit-Hit, IDOR-Abwehr, SSRF-Block, Password-Reset, JWT-Reject. + Threshold-Detection (Brute-Force, IDOR-Probing, SSRF-Probing) erzeugt + CRITICAL-Events. **Sofort-E-Mail-Alerts** für CRITICAL + **stündlicher Digest** + für HIGH/MEDIUM. UI in Einstellungen → Monitoring mit Filter, Pagination, + Log-leeren (mit optionalem Tage-Filter) und Test-Alert-Button. +- 🔄 **Auto-Vertragsstatus**: + - Lieferbestätigung-Upload → `DRAFT` → `ACTIVE` + `startDate` + - Kündigungsbestätigung-Upload → `ACTIVE` → `CANCELLED` + `cancellationConfirmationDate` + (mit Datums-Modal beim Upload) + - Nightly-Cron 02:00: alle `ACTIVE`-Verträge mit `endDate < heute` → `EXPIRED` +- 🔐 **Lazy bcrypt-Rehash**: Bestandshashes mit Cost 10 werden beim nächsten + Login transparent auf Cost 12 geupgradet. +- 🚪 **Logout-Endpoint** `POST /api/auth/logout`: invalidiert JWTs serverseitig + über `tokenInvalidatedAt`. +- 📦 **`npm audit fix`**: 8 transitive Vulnerabilities gefixt (lodash, + path-to-regexp, undici, minimatch). + +### 1.0.0 + +Erste Release-Version. + +- Kunden-, Vertrags-, Adress-, Bankkarten-, Ausweis- und Zählerverwaltung +- Energie-/Telekommunikations-/KFZ-Verträge mit typspezifischen Details +- Vertrags-Cockpit mit Rechnungsprüfung +- E-Mail-Client mit Anhang-Verwaltung +- DSGVO-Compliance: Audit-Log, Einwilligungen, Datenexport, Löschanfragen +- PDF-Auftragsvorlagen-System mit visueller Feldzuordnung +- Factory-Defaults für Stammdaten-Kataloge +- Mandantenfähigkeit über `customerEmailLabel` pro Provider +- Passwort-Reset-Flow + Rate-Limiting + Auto-Geburtstagsgrüße + ## Lizenz MIT diff --git a/backend/package.json b/backend/package.json index 72345f2a..fab5e624 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "opencrm-backend", - "version": "1.0.0", + "version": "1.1.0", "description": "OpenCRM Backend API", "main": "dist/index.js", "prisma": { diff --git a/frontend/package.json b/frontend/package.json index d9a229c4..952f6524 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -1,6 +1,6 @@ { "name": "opencrm-frontend", - "version": "1.0.0", + "version": "1.1.0", "type": "module", "scripts": { "dev": "vite",