fix(security): behebe F-01/F-02/W-03/W-04 aus Security-Audit + PROJ-24 TOTP 2FA
F-01: err.Error() wird nicht mehr an HTTP-Clients gesendet.
Stattdessen generische Fehlermeldungen + Server-Log.
Betrifft: handleCreateUser, handleUpdateUser, handleDeleteUser,
handleSyncNow, handleSecurityConfig, handleUpload.
F-02: Login-Audit-Log enthält keinen rohen err.Error() mehr.
Neue classifyLoginError() Funktion: invalid_password / ldap_error /
account_disabled / unknown — schützt vor LDAP-Info-Leak via Audit-API.
W-03: remoteIP() trimmt jetzt Leerzeichen aus X-Forwarded-For.
Vollständige Lösung erfordert Proxy-Konfiguration (W-03 bleibt WARN).
W-04: Attachment-Dateiname wird durch sanitizeFilename() bereinigt.
Nur [a-zA-Z0-9._- ] erlaubt — verhindert Header-Injection.
PROJ-24: TOTP 2FA vollständig implementiert:
- internal/auth/totp.go: GenerateSecret, ValidateTOTP, QRCodeSVG
- internal/api/totp_handlers.go: Setup, Login-Step2, Admin-Reset
- internal/userstore: SetTOTPSecret, EnableTOTP, DisableTOTP, ResetTOTP
- Login-Flow: totp_pending JWT → /api/auth/totp → vollwertiger JWT
- AES-256-GCM verschlüsseltes Secret in users.totp_secret
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -41,6 +41,20 @@ created: 2026-03-17
|
||||
|
||||
**Offene Phasen:** Phase 4 (Xapian per-tenant Index-Filter)
|
||||
|
||||
## Phase 4 -- QA-Bericht (2026-03-18, Code-Review)
|
||||
|
||||
### Gesamtbewertung: APPROVED -- alle 5 Pruefpunkte bestanden
|
||||
|
||||
| # | Pruefpunkt | Ergebnis | Details |
|
||||
|---|-----------|----------|---------|
|
||||
| X1 | Pro-Mandant-Verzeichnis tenant-<id>/ | PASS | `tenant_manager.go:69` |
|
||||
| X2 | ForTenant(nil) nil-safe | PASS | `tenant_manager.go:47` |
|
||||
| X3 | handleSearch nutzt tenant_id aus Session | PASS | `server.go:627-633` |
|
||||
| X4 | Thread-Safety (RWMutex + Channel) | PASS | `tenant_manager.go:16,53-62` / `tenant_worker.go:25` |
|
||||
| X5 | Close() auf allen Indexen | PASS | `tenant_manager.go:91-110`, `main.go:121` |
|
||||
|
||||
Dateien: `internal/index/tenant_manager.go`, `internal/index/tenant_worker.go`, `internal/api/server.go`, `cmd/archivmail/main.go`
|
||||
|
||||
## Ziel
|
||||
|
||||
Das System soll mehrere Kunden (Mandanten/Tenants) auf einer einzigen Instanz betreiben können. Jeder Mandant verwaltet seine eigene Domain, seine eigenen Nutzer und sieht ausschließlich seine eigenen E-Mails. Kunden-Admins können ihre Domain selbst verwalten und weitere Domain-Admins ernennen.
|
||||
|
||||
Reference in New Issue
Block a user