F09 Dokumentationsänderungen authentisieren und gegen CSRF schützen
Frühere Version vom 2026-07-16T18:39:13.335375+02:00 · zur aktuellen Fassung
Dokumentationsänderungen authentisieren und gegen CSRF schützen
Finding: F09 Priorität: P0 Status: OFFEN Stand: 2026-07-16
Problembeschreibung
- POST /doku/{slug} ist öffentlich (public/index.php:127).
- DokuSpeichernAction schreibt ohne AuthN/AuthZ/CSRF (DokuSpeichernAction.php:30).
- App-Rolle hat pauschales DML auf alle Public-Tabellen (migrations/0004_app_grants.sql:7).
Ziel
Lesen bleibt möglich; Schreiben nur authentisiert/autorisiert mit CSRF und Actor-Audit.
Aufgabe
- AuthN/AuthZ-Middleware.
- Synchronizer Token, SameSite, Originprüfung.
- app.actor transaktional setzen; DB-Grants, Revision, Rate-/Body-Limit minimieren.
Scope
- In Scope: alle unter Code Blast genannten Komponenten, Daten, Verträge und Tests.
- Out of Scope: neue Features und produktive externe Mutation ohne separate Freigabe.
Harte Spezifikation
- MUST: anonymer POST verändert 0 Zeilen.
- MUST: falscher CSRF liefert 403.
- MUST: History enthält Actor.
- MUST: keine globalen DML-Rechte.
Harte Quality Gateways
- HTTP-Matrix anonym/Rolle/CSRF.
- DB-Diff nach Ablehnung leer.
- Grant-Abfrage minimal.
- Concurrent Edit erkannt/Actor auditiert.
- Global: PHPStan Level 8 und PHPUnit liefern 0 Fehler; kein Ignore oder Baseline.
Code Blast
- Direkt: public/index, Doku-Action/View/JS, Middleware, Repository.
- DB: Grants/Actor/Sessions.
Code-Impact-Analyse
- Editor erfordert Login.
- Automatik braucht Serviceaccount/CLI.
Risikoanalyse
| Risiko | Eintritt | Schaden | |---|---|---| | Öffentliche Manipulation | hoch | kritisch | | CSRF/breite DB-Rolle | hoch | kritisch |
Strategie zur Risikonullierung
- Prevent: AuthN/AuthZ/CSRF/Least Privilege.
- Detect: Actor-Audit.
- Contain: Schreibrolle/Limit.
- Recover: Historie.
Abschlussnachweis
Erledigt erst, wenn alle MUST-Spezifikationen implementiert, alle Gateways mit unveränderlicher Evidenz grün und Restrisiken technisch ausgeschlossen oder ausdrücklich fachlich akzeptiert sind.