M8: Security-Headers, Rate-Limits und Audit-Log
Erste drei Bausteine der Haertung: - Security-Headers (X-Content-Type-Options, X-Frame-Options, Referrer- Policy, Permissions-Policy, HSTS bei HTTPS) laufen automatisch ueber app_send_security_headers() am Ende von app/bootstrap.php fuer jede dynamische Seite; landing.php war als einzige Seite ganz ohne PHP und bekam einen minimalen Bootstrap-Aufruf. Bewusst kein CSP, da die bestehenden Templates durchgaengig auf Inline-style-Attribute setzen. - DB-gestuetzte Rate-Limits (neue Tabelle rate_limit_attempts) fuer Login (10/15min je E-Mail, 20/15min je IP), Registrierung (5/h je IP) und Passwort-Reset-Anfrage (5/h je E-Mail, 10/h je IP); bei ausgereiztem Reset-Limit erscheint dieselbe generische Meldung wie im Erfolgsfall, um kein Konto-Enumeration-Signal zu geben. - Zentrales Audit-Log (neue Tabelle audit_log) fuer Mitgliederverwaltung, Zugangsvergabe/-entzug, Storno, Mandant-Einstellungen, Hinweise, CSV-Import, Jahresbonus-Verteilung und Live-Mailversand; sichtbar fuer Owner/Admin auf mandant-einstellungen.php. Live getestet: Rate-Limit greift nach 10 Fehlversuchen, Audit-Log-Eintrag mit korrekten Metadaten und Nutzernamen ueber einen isolierten Test- Mandanten geprueft. Alle Regressionstests weiterhin gruen (26/26 Smoke, 104 Golden-Master-Assertions). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -308,7 +308,7 @@ Nicht tun:
|
||||
| M5 | App-Kern | Weit fortgeschritten: Kernseiten lesen und schreiben tenant-sicher gegen das Ledger, inklusive Hinweise und rollenbasiertem Zugang; offen ist ein eigener Zahlungs-Screen |
|
||||
| M6 | Betriebsflows | Abgeschlossen: Import, Export, Mail und Jahresabschluss sind auditierbar |
|
||||
| M7 | Landingpage | Public-Seite und Auth-Seiten sind im gemeinsamen Stil nutzbar; spätere Ausbaustufen folgen |
|
||||
| M8 | Härtung | Betrieb, Datenschutz, Monitoring und Isolation sind geprüft |
|
||||
| M8 | Härtung | Gestartet: Security-Headers, Rate-Limits und Audit-Log stehen; Isolation/Rollenmatrix-Tests, Datenexport, Löschung und Betrieb offen |
|
||||
| M9 | Cutover | Produktivumstellung ist vorbereitet und Legacy ist read-only |
|
||||
|
||||
### M0: Planungs- und Sicherheitsbaseline
|
||||
@@ -643,16 +643,22 @@ Schritte:
|
||||
|
||||
- Backups und Restore-Prozess definieren.
|
||||
- Monitoring und Fehlerlogging einrichten.
|
||||
- Audit-Log für Admin-Aktionen prüfen.
|
||||
- Audit-Log für Admin-Aktionen prüfen: erledigt. Neue Tabelle `audit_log`,
|
||||
protokolliert Mitgliederverwaltung, Storno, Mandant-Einstellungen,
|
||||
Hinweise, CSV-Import, Jahresbonus und Live-Mailversand; sichtbar für
|
||||
Owner/Admin auf `mandant-einstellungen.php`.
|
||||
- Datenexport pro Tenant.
|
||||
- Lösch-/Anonymisierungsprozess für Teilnehmer und Kunden.
|
||||
- Rate-Limits und Security Headers.
|
||||
- Rate-Limits und Security Headers: erledigt. Globale Security-Headers
|
||||
über `app/bootstrap.php` (ohne CSP, siehe `docs/m8-haertung.md`),
|
||||
DB-gestützte Rate-Limits für Login, Registrierung und Passwort-Reset.
|
||||
- Mandanten-Isolation testen.
|
||||
- Rollenmatrix testen.
|
||||
|
||||
Ergebnis:
|
||||
|
||||
- SaaS ist betrieblich und datenschutzseitig belastbarer.
|
||||
- Stand: gestartet. Dokumentation: `docs/m8-haertung.md`.
|
||||
|
||||
Abhängigkeiten:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user