duffyduck
|
1c46d7345c
|
Security-Hardening: IDOR-Fixes, XSS-Sanitizer, CORS+Helmet, Data-Exposure
Umfassender Security-Review vor öffentlichem Deployment.
Detaillierter Report in docs/SECURITY-REVIEW.md.
🔴 KRITISCHE FIXES:
1. CORS offen → jetzt nur explizite Origins (via CORS_ORIGINS env),
in Production per default komplett aus (gleiche Origin erzwingt Browser).
2. Keine Security-Headers → helmet-Middleware hinzugefügt.
X-Frame-Options, X-Content-Type-Options, HSTS, Referrer-Policy, CORP.
3. JWT-Fallback-Secret entfernt. Beim Server-Start wird jetzt geprüft ob
JWT_SECRET (min 32 Zeichen) und ENCRYPTION_KEY (exakt 64 Hex) gesetzt sind,
sonst Fail-Fast mit klarer Fehlermeldung.
4. IDOR bei 7 Contract-Endpoints. Portal-Kunden mit 'contracts:read'
konnten über geratene IDs fremde Daten abrufen (Passwort, SIM-PIN/PUK,
Internet-Zugangsdaten, SIP-Credentials, Vertragsdokumente, Rechnungen).
Neuer Helper canAccessContract() in utils/accessControl.ts in allen
betroffenen Endpoints eingebaut. Prüft Vertrag-Besitzer + Vollmachten.
5. XSS via Email-Body. email.htmlBody wurde ungefiltert via
dangerouslySetInnerHTML gerendert. Angreifer konnte Mail mit <script>
schicken → Token-Diebstahl aus localStorage. Jetzt mit DOMPurify
sanitized: verbietet script/iframe/form/inline-handler, erlaubt
normale Formatierung + Bilder.
6. Customer-API leakte sensible Felder:
- portalPasswordHash (bcrypt-Hash)
- portalPasswordEncrypted (symmetrisch, mit ENCRYPTION_KEY entschlüsselbar)
- portalPasswordResetToken (gültig 2h)
Neuer Sanitizer in utils/sanitize.ts, angewendet in getCustomer/getCustomers.
Admin mit customers:update darf portalPasswordEncrypted sehen (für UI-Anzeige),
alle anderen Rollen nicht.
🟡 WICHTIGE FIXES:
7. Portal-JWT-Invalidation nach Passwort-Reset. Neues Feld
Customer.portalTokenInvalidatedAt, wird beim Reset auf now() gesetzt.
Auth-Middleware prüft Portal-Sessions dagegen. Alte Sessions werden
dadurch invalidiert.
8. express.json() mit 5 MB Size-Limit (statt Default 100 KB unklar).
Neue Files:
- backend/src/utils/accessControl.ts - IDOR-Schutz
- backend/src/utils/sanitize.ts - Response-Sanitizer
- docs/SECURITY-REVIEW.md - vollständiger Report + Deployment-Checkliste
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-23 22:06:16 +02:00 |
duffyduck
|
8fc050a282
|
docs: TESTING.md mit Check-Listen für Security + Email-Log-System
Strukturierter Test-Katalog für manuelle Abnahmetests vor einem Release.
Security-System (10 Abschnitte):
- Login + Rate-Limiting
- Passwort-Reset-Flow (Mitarbeiter + Portal)
- Rate-Limiting Passwort-Reset
- Berechtigungen (RBAC)
- Portal-Isolation (DSGVO-kritisch)
- Session-Invalidation
- Audit-Log
- DSGVO-Features (Export, Löschanfragen, Einwilligungen)
- Verschlüsselte Credentials
- DSGVO-Einwilligung sperrt Tabs für Mitarbeiter
Email-Log-System (5 Abschnitte):
- Email-Log-Seite (UI, Filter, Suche, Pagination)
- Alle 6 Kontexte durchspielen:
consent-link, authorization-request, customer-email,
birthday-greeting, birthday-greeting-auto, password-reset
- Fehlgeschlagener Versand wird geloggt (Test mit falschem SMTP-Passwort)
- Details-Modal mit SMTP-Details
- Automatisches Logging (Kontext, triggeredBy)
Außerdem: Neue Kontexte in EmailLogs.tsx CONTEXT_LABELS ergänzt
(birthday-greeting, birthday-greeting-auto, password-reset).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
|
2026-04-23 17:21:34 +02:00 |