Some checks failed
Deploy Development / deploy (push) Successful in 39s
Test Suite / pytest-backend (push) Successful in 34s
Test Suite / lint-backend (push) Successful in 1s
Test Suite / build-frontend (push) Successful in 11s
Test Suite / playwright-tests (push) Failing after 1m23s
Implementiert server-seitige Rechteerklärungspflicht für alle Medien-Uploads
und Sichtbarkeits-Promotions (konservative Erstannahme: alle Uploads).
Backend:
- backend/media_rights.py (NEU): Kernmodul — validate_rights_declaration,
check_rights_coverage, assert_rights_for_promotion, assert_rights_for_exercise_link,
write_rights_declaration, update_rights_quick_fields
- backend/migrations/048_media_rights_declarations.sql (NEU): Tabelle
media_asset_rights_declarations (Append-only Audit-Log), Felder
rights_status/rights_visibility_level in media_assets
- backend/routers/media_assets.py: P-06-Pflichtprüfung in PATCH (single + bulk),
POST /api/media-assets/{id}/rights-declarations (Re-Deklaration),
GET /api/admin/media-rights/legacy-summary|legacy-assets (Admin-Endpoints)
- backend/routers/exercises.py: P-06-Felder in upload_exercise_media,
assert_rights_for_exercise_link in attach_exercise_media_from_asset
- backend/main.py: admin_rights_router registriert
Frontend:
- frontend/src/components/RightsDeclarationDialog.jsx (NEU): 9-Felder-Dialog
(konservativ: immer alle Fragen), Client-Validierung, VORLÄUFIG-Hinweis
- frontend/src/pages/MediaLibraryPage.jsx: Dialog-Intercept vor Upload,
Altbestand-Indikator (legacy_unreviewed)
- frontend/src/utils/api.js: P-06-Felder in bulkUploadMediaAssets weitergeleitet
Tests:
- backend/tests/test_media_rights_declaration.py (NEU): 28 Unit-/Integrationstests
- backend/tests/test_media_assets_archive.py: P-06 fetchone-Slots + Mock ergänzt
- backend/tests/test_media_assets_copyright_promotion.py: check_rights_coverage gemockt
- tests/dev-smoke-test.spec.js: 5 P-06 E2E-Tests ergänzt
Dokumentation:
- docs/compliance-implementation.md: P-06-Abschnitt
- docs/compliance-package-register.md: Status ⚠️ teilweise umgesetzt (KRIT-04 offen)
- docs/compliance-roadmap.md: P-06 im Freigaben-Log
Offen: KRIT-04 (rechtliche Finalisierung Einwilligungsformulierung) — technisch
vollständig, Rechtstext VORLÄUFIG.
version: 0.8.75
module: media_rights 1.0.0, media_assets 1.13.0, exercises 2.20.0
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
436 lines
22 KiB
Markdown
436 lines
22 KiB
Markdown
# Compliance-Paketregister – Shinkan Jinkendo
|
||
|
||
**Typ:** Kanonisches Referenzdokument
|
||
**Erstellt:** 2026-05-10
|
||
**Basisdokument:** `docs/compliance-audit.md` (Initial-Audit 2026-05-09, App-Version 0.8.65)
|
||
**Letzte Aktualisierung:** 2026-05-10 (App-Version 0.8.74)
|
||
|
||
---
|
||
|
||
> **Verbindliche Regel:** Paket-IDs werden nach ihrer ersten Vergabe in `docs/compliance-audit.md` nie wieder umnummeriert oder wiederverwendet. Dieses Dokument ist der kanonische Verweis für alle Freigaben, Umsetzungsberichte und Audits. Abweichende Nummerierungen in nachgelagerten Dokumenten sind Fehler und müssen auf die kanonische ID korrigiert werden. Nacharbeiten zu einem Paket erhalten Suffixe (z. B. P-03b, P-05b), keine neue Hauptnummer.
|
||
|
||
---
|
||
|
||
## Status-Legende
|
||
|
||
| Symbol | Bedeutung |
|
||
|--------|-----------|
|
||
| ✅ implemented | Vollständig umgesetzt und getestet |
|
||
| ⚠️ partially implemented | Teilweise umgesetzt; Nacharbeit dokumentiert |
|
||
| ❌ open | Nicht umgesetzt, offen |
|
||
| 🔒 scope excluded | Bewusst außerhalb des technischen Umsetzungsscopes |
|
||
|
||
---
|
||
|
||
## Etappe 1 – Pflicht vor öffentlichem Betrieb
|
||
|
||
### P-01 – Rechtstexte
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Rechtstexte (Impressum, Datenschutzerklärung, AGB, Medienrichtlinie) |
|
||
| **Findings** | KRIT-01 |
|
||
| **Etappe** | 1 |
|
||
| **Status** | ⚠️ partially implemented |
|
||
| **Letzter Stand** | Technischer Teil vollständig umgesetzt (2026-05-10, Version 0.8.74, inkl. P-01b + P-01c + Erweiterungen): Routen `/impressum`, `/datenschutz`, `/nutzungsbedingungen`, `/medienrichtlinie` öffentlich erreichbar ohne Auth. Platzhalterseiten mit strukturierten Pflichtfeldern und sichtbarem Muster-Hinweis. Links in LoginPage, DesktopSidebar und `/settings/legal` (Mobile/PWA, P-01b, 0.8.70). Admin-konfigurierbare Rechtstexte mit Versionierung + Publish/Archive-Workflow (DB 047, Superadmin-UI `/admin/legal-documents`, P-01c, 0.8.71). Als-Entwurf-kopieren: `POST /api/admin/legal-documents/{id}/copy-as-draft` (0.8.72). Echter PDF-Download via jsPDF (direkter Dateidownload, A4, Seitenumbruch, Footer), Abschnitte sortieren (▲/▼) und an beliebiger Stelle einfügen (0.8.74). **Juristisch geprüfte Inhalte fehlen noch — Betreiber + Rechtsanwalt erforderlich. KRIT-01 bleibt offen bis zur Veröffentlichung echter Texte.** |
|
||
| **Verweise** | `docs/compliance-audit.md` §14.2, §17, §19.1; `docs/compliance-implementation.md` §P-01, §P-01b, §P-01c; `frontend/src/pages/LegalPage.jsx`; `frontend/src/pages/SettingsLegalPage.jsx`; `frontend/src/pages/AdminLegalDocumentsPage.jsx`; `backend/routers/legal_documents.py`; `backend/migrations/047_legal_documents.sql` |
|
||
| **Hinweise** | P-01b (Mobile-Erreichbarkeit, 0.8.70) und P-01c (Admin-konfigurierbar, 0.8.71) als Suffix-Pakete ergänzt und vollständig umgesetzt. Erweiterungen: copy-as-draft (0.8.72), jsPDF + Abschnitts-Sortierung/-Einfügen (0.8.74). Keine Nummerierungsabweichung. |
|
||
|
||
---
|
||
|
||
### P-02 – Self-Service-Kontolöschung + Datenexport
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Self-Service-Kontolöschung und Datenexport (DSGVO Art. 17, 15, 20) |
|
||
| **Findings** | KRIT-02, KRIT-05 |
|
||
| **Etappe** | 1 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. `DELETE /api/profiles/{pid}` nur für Plattform-Admin. |
|
||
| **Verweise** | `docs/compliance-audit.md` §7.3, §11.2, §17 |
|
||
| **Hinweise** | In `docs/compliance-implementation.md` als „Self-Service-Löschworkflow" bezeichnet — inhaltlich korrekt, Titel leicht abgekürzt. |
|
||
|
||
---
|
||
|
||
### P-03 – Papierkorb-Retention-Job aktivieren
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Papierkorb-Retention-Job aktivieren (automatische tägliche Ausführung) |
|
||
| **Findings** | KRIT-07 |
|
||
| **Etappe** | 1 |
|
||
| **Status** | ✅ implemented |
|
||
| **Letzter Stand** | Umgesetzt in Version 0.8.66. Neuer Docker-Service `retention-cron` in `docker-compose.yml`. Python-basierter Loop, täglich 03:00 Uhr. |
|
||
| **Nacharbeit** | P-03b (Retention-Zeiten mit Löschkonzept abgleichen) — siehe unten |
|
||
| **Verweise** | `docs/compliance-audit.md` §9.2, §17; `docs/compliance-implementation.md` §P-03 |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
#### P-03b – Nacharbeit: Retention-Zeiten mit Löschkonzept abgleichen
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Typ** | Nacharbeit zu P-03 (kein eigenes Hauptpaket) |
|
||
| **Status** | ✅ implemented (2026-05-10, Version 0.8.67) |
|
||
| **Befund** | Default `HIDDEN_TO_PURGE_DAYS` war 90 Tage; fachliches Löschkonzept sieht 30+30 vor. |
|
||
| **Änderung** | `backend/media_lifecycle.py`: Default `"90"` → `"30"`; `docker-compose.yml`: Env-Variable dokumentiert. |
|
||
| **Verweise** | `docs/compliance-implementation.md` §P-03b |
|
||
|
||
---
|
||
|
||
### P-04 – Copyright-Pflicht für Archiv-Promotion vereinheitlichen
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Copyright-Pflicht bei Archiv-Promotion vereinheitlichen |
|
||
| **Findings** | KRIT-06 |
|
||
| **Etappe** | 1 |
|
||
| **Status** | ✅ implemented |
|
||
| **Letzter Stand** | Umgesetzt in Version 0.8.66. `patch_media_asset()` und `bulk_media_patch()` erzwingen `copyright_notice` bei Promotion auf `club`/`official`. 7 Tests, alle grün. |
|
||
| **Verweise** | `docs/compliance-audit.md` §6.3, §8.1, §17; `docs/compliance-implementation.md` §P-04; `backend/tests/test_media_assets_copyright_promotion.py` |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
### P-05 – Passwort-Mindestlänge angleichen
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Passwort-Mindestlänge angleichen (alle Endpoints: mindestens 8 Zeichen) |
|
||
| **Findings** | MITT-01, SEC-04, SEC-12, NIED-06 |
|
||
| **Etappe** | 1 |
|
||
| **Status** | ✅ implemented (vollständig, inkl. P-05b) |
|
||
| **Letzter Stand** | Version 0.8.66: `PUT /api/auth/pin`, `LoginPage.jsx`, `AccountSettingsPage.jsx`. Version 0.8.67: `POST /api/auth/reset-password` via P-05b. Alle 6 Punkte geschlossen. |
|
||
| **Nacharbeit** | P-05b (`reset-password` Mindestlänge) — siehe unten |
|
||
| **Verweise** | `docs/compliance-audit.md` §13.2 (SEC-04, SEC-12), §16 (MITT-01); `docs/compliance-implementation.md` §P-05, §P-05b |
|
||
| **Hinweise** | P-05 gilt als vollständig geschlossen nach Abschluss von P-05b (2026-05-10). |
|
||
|
||
#### P-05b – Nacharbeit: reset-password Mindestlänge
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Typ** | Nacharbeit zu P-05 (kein eigenes Hauptpaket) |
|
||
| **Status** | ✅ implemented (2026-05-10, Version 0.8.67) |
|
||
| **Befund** | `POST /api/auth/reset-password` hatte kein Mindestlängen-Limit im Backend. |
|
||
| **Änderung** | `backend/models.py`: `PasswordResetConfirm.new_password = Field(min_length=8, max_length=128)`. 7 neue Tests. |
|
||
| **Verweise** | `docs/compliance-implementation.md` §P-05b; `backend/tests/test_auth_password_reset_minlength.py` |
|
||
|
||
---
|
||
|
||
### P-06 – Upload-Einwilligungsdialog
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Upload-Einwilligungsdialog (Recht am eigenen Bild, Personen, Minderjährige) |
|
||
| **Findings** | KRIT-04 |
|
||
| **Etappe** | 1 |
|
||
| **Status** | ⚠️ teilweise umgesetzt (KRIT-04 offen) |
|
||
| **Letzter Stand** | **Technisch umgesetzt (2026-05-11, v0.8.75)** unter vorläufigen Erstannahmen `p06-v1-conservative`. Umsetzung: Migration 048 (`media_asset_rights_declarations` + 3 Schnellfelder in `media_assets`); `backend/media_rights.py`; Enforcement in Bulk-Upload, PATCH, Bulk-PATCH, exercises.py; `RightsDeclarationDialog.jsx`; Altbestand-Indikator; 3 neue Admin-Endpoints. Abweichung von Spec §3: Person-Fragen auch bei `private` Pflicht (konservative Erstannahme, juristische Prüfung steht aus). Juristische Klärungspunkte (§22 KUG, §8 DSGVO, Widerrufsrecht etc.) offen — KRIT-04 bleibt. Details: `docs/p06-upload-rights-spec.md` §10, `docs/compliance-implementation.md` §P-06. |
|
||
| **Verweise** | `docs/compliance-audit.md` §8.2, §8.3, §11.4, §17; `docs/p06-upload-rights-spec.md`; `docs/compliance-implementation.md` §P-06; `backend/media_rights.py`; `backend/migrations/048_media_rights_declarations.sql` |
|
||
| **Hinweise** | **Drift-Hinweis (2026-05-10):** In `docs/compliance-implementation.md` (vor Korrektur) wurde P-06 fälschlich als „HSTS-Header" beschrieben. Korrigiert. **Implementierungsstatus (2026-05-11):** Technisch umgesetzt; juristische Validierung und KRIT-04-Schließung noch ausstehend. |
|
||
|
||
---
|
||
|
||
## Etappe 2 – Sicherheit und Datenschutz
|
||
|
||
### P-07 – ALLOW_PUBLIC_MEDIA_STATIC dokumentieren + Test
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | ALLOW_PUBLIC_MEDIA_STATIC dokumentieren und Release-Test einrichten |
|
||
| **Findings** | HOCH-01, SEC-05 |
|
||
| **Etappe** | 2 |
|
||
| **Status** | ✅ implemented |
|
||
| **Letzter Stand** | Umgesetzt in Version 0.8.66. 2 Tests in `test_security_release.py`: Flag deaktiviert per Default; Flag aktiviert mounted `/media`. |
|
||
| **Verweise** | `docs/compliance-audit.md` §13.5, §17; `docs/compliance-implementation.md` §P-07; `backend/tests/test_security_release.py` |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
### P-08 – HSTS / externe Proxy-Sicherheit dokumentieren
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | HSTS und externe Proxy-Sicherheit dokumentieren |
|
||
| **Findings** | HOCH-02, SEC-01 |
|
||
| **Etappe** | 2 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. HSTS liegt außerhalb des Repo-Scopes (Reverse-Proxy/Fritz!Box). Betreiber-Verantwortung. |
|
||
| **Verweise** | `docs/compliance-audit.md` §13.2 (SEC-01), §19.7 |
|
||
| **Hinweise** | **Drift-Hinweis:** In `docs/compliance-implementation.md` (vor Korrektur 2026-05-10) fehlte P-08 vollständig in der „Nicht umgesetzte Pakete"-Tabelle. Der Inhalt „HSTS-Header" war fälschlich P-06 zugeordnet. Korrigiert in `docs/compliance-implementation.md`. |
|
||
|
||
---
|
||
|
||
### P-09 – Admin-Audit-Log
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Admin-Audit-Log (Protokollierung von Admin-Aktionen) |
|
||
| **Findings** | HOCH-05, SEC-07 |
|
||
| **Etappe** | 2 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. Keine `admin_audit_log`-Tabelle vorhanden. Profil-Löschungen und Lifecycle-Aktionen nicht protokolliert. |
|
||
| **Verweise** | `docs/compliance-audit.md` §13.2 (SEC-07), §16 (HOCH-05), §17 |
|
||
| **Hinweise** | **Drift-Hinweis:** In `docs/compliance-implementation.md` (vor Korrektur 2026-05-10) wurde P-09 fälschlich als „Kein Einwilligungsdialog Recht am eigenes Bild" beschrieben. Der korrekte Titel ist „Admin-Audit-Log". Der Einwilligungsdialog gehört zu P-06. Korrigiert in `docs/compliance-implementation.md`. |
|
||
|
||
---
|
||
|
||
### P-10 – Mindestalter-Abfrage
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Mindestalter-Abfrage bei Registrierung |
|
||
| **Findings** | HOCH-06 |
|
||
| **Etappe** | 2 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. Keine Altersverifikation bei Registrierung. Juristisch zu prüfen (§8 DSGVO). |
|
||
| **Verweise** | `docs/compliance-audit.md` §11.4, §16 (HOCH-06), §17 |
|
||
| **Hinweise** | **Drift-Hinweis:** In `docs/compliance-implementation.md` (vor Korrektur 2026-05-10) wurde P-10 fälschlich als „DSA-Meldeverfahren" beschrieben. Der korrekte Titel ist „Mindestalter-Abfrage". Das DSA-Meldeverfahren gehört zu P-13–P-16. Korrigiert in `docs/compliance-implementation.md`. |
|
||
|
||
---
|
||
|
||
### P-11 – Legal-Hold Lifecycle-Status
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Legal-Hold Lifecycle-Status (Sofortsperrung bei Rechtsverletzung) |
|
||
| **Findings** | MITT-02 |
|
||
| **Etappe** | 2 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. Stufe-1-Papierkorb dauert 30 Tage bis zur vollständigen Unsichtbarkeit. Kein direkter Sperr-Status. |
|
||
| **Verweise** | `docs/compliance-audit.md` §9.2, §16 (MITT-02), §17 |
|
||
| **Hinweise** | **Drift-Hinweis:** In `docs/compliance-implementation.md` (vor Korrektur 2026-05-10) wurde P-11 fälschlich als „HttpOnly-Cookie-Migration" beschrieben. Der korrekte Titel ist „Legal-Hold Lifecycle-Status". HttpOnly-Cookie gehört zu P-18. Korrigiert in `docs/compliance-implementation.md`. |
|
||
|
||
---
|
||
|
||
### P-12 – sessionStorage bei Logout bereinigen
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | sessionStorage bei Logout bereinigen |
|
||
| **Findings** | MITT-05 |
|
||
| **Etappe** | 2 |
|
||
| **Status** | ✅ implemented |
|
||
| **Letzter Stand** | Umgesetzt 2026-05-10, Version 0.8.68. `logout()` in `AuthContext.jsx` löscht jetzt alle `sj_coach_*`-Schlüssel via Präfix-Iteration. Gezielte Löschung (kein `sessionStorage.clear()`), fremde Schlüssel bleiben erhalten. Playwright-Test ergänzt in `tests/dev-smoke-test.spec.js`. |
|
||
| **Verweise** | `docs/compliance-audit.md` §5.6, §16 (MITT-05), §17; `docs/compliance-implementation.md` §P-12; `frontend/src/context/AuthContext.jsx`; `tests/dev-smoke-test.spec.js` |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
### P-22 – HTML-Sanitizer für Rich-Text-Felder
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | HTML-Sanitizer für Rich-Text-Felder (bleach/nh3 Allowlist) |
|
||
| **Findings** | NIED-09, SEC-11 |
|
||
| **Etappe** | 2 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. `exercise_rich_text.py` normalisiert nur Inline-Media-Markup. Beliebiges HTML in `summary`, `goal`, `execution`, `preparation`, `trainer_notes` möglich. CSP schützt gegen Script-Execution. |
|
||
| **Verweise** | `docs/compliance-audit.md` §13.3 (SEC-11), §13.2 (NIED-09), §17 |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
### P-23 – LoginPage: minLength angleichen + Versionsstring entfernen
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | LoginPage: minLength angleichen und hartcodierten Versionsstring entfernen |
|
||
| **Findings** | NIED-06, NIED-07, SEC-12, SEC-13 |
|
||
| **Etappe** | 2 |
|
||
| **Status** | ✅ implemented |
|
||
| **Letzter Stand** | Umgesetzt in Version 0.8.66. `minLength="6"` → `"8"`; Versionsstring `v0.1.0 • Development` entfernt. |
|
||
| **Verweise** | `docs/compliance-audit.md` §13.2 (SEC-12, SEC-13, NIED-06, NIED-07), §17; `docs/compliance-implementation.md` §P-23 |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
### P-24 – CORS einschränken
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | CORS allow_methods und allow_headers auf tatsächlich benötigte Werte einschränken |
|
||
| **Findings** | NIED-08, SEC-14 |
|
||
| **Etappe** | 2 |
|
||
| **Status** | ✅ implemented |
|
||
| **Letzter Stand** | Umgesetzt in Version 0.8.66. `allow_methods=["GET","POST","PUT","PATCH","DELETE","OPTIONS"]`; `allow_headers=["Content-Type","X-Auth-Token","X-Active-Club-Id"]`. |
|
||
| **Verweise** | `docs/compliance-audit.md` §13.3, §17; `docs/compliance-implementation.md` §P-24 |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
## Etappe 3 – DSA-Meldeverfahren
|
||
|
||
### P-13 – Content-Melde-Backend
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Content-Melde-Backend (content_reports-Tabelle + Endpoints) |
|
||
| **Findings** | KRIT-03 |
|
||
| **Etappe** | 3 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. Juristisch zu klären (DSA-Anwendungsbereich). Technische Spec vorhanden in `docs/compliance-audit.md` §17. |
|
||
| **Verweise** | `docs/compliance-audit.md` §12, §17 |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
### P-14 – Moderations-UI
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Moderations-UI (Frontend für Moderation-Queue) |
|
||
| **Findings** | KRIT-03 |
|
||
| **Etappe** | 3 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. Abhängig von P-13. |
|
||
| **Verweise** | `docs/compliance-audit.md` §12, §17 |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
### P-15 – Uploader-Benachrichtigung bei Sperrung
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Uploader-Benachrichtigung bei Sperrung oder Löschung |
|
||
| **Findings** | KRIT-03 |
|
||
| **Etappe** | 3 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. Kein Benachrichtigungssystem vorhanden. |
|
||
| **Verweise** | `docs/compliance-audit.md` §9.2, §12, §17 |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
### P-16 – Beschwerdeverfahren
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Beschwerdeverfahren (Nutzer-Rechtsbehelfsweg gegen Moderationsentscheidungen) |
|
||
| **Findings** | KRIT-03 |
|
||
| **Etappe** | 3 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. Abhängig von P-13–P-15. |
|
||
| **Verweise** | `docs/compliance-audit.md` §12, §17 |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
## Etappe 4 – Langfristige Optimierungen
|
||
|
||
### P-17 – MFA für Superadmins (TOTP)
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | MFA für Superadmins (TOTP-Zweifaktorauthentifizierung) |
|
||
| **Findings** | HOCH-04, SEC-06 |
|
||
| **Etappe** | 4 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. Kein TOTP/OTP implementiert. |
|
||
| **Verweise** | `docs/compliance-audit.md` §13.2 (SEC-06), §16 (HOCH-04), §17 |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
### P-18 – HttpOnly-Cookie als Auth-Alternative
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | HttpOnly-Cookie als Auth-Alternative (XSS-Schutz für Auth-Token) |
|
||
| **Findings** | HOCH-03, SEC-02 |
|
||
| **Etappe** | 4 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. Auth-Token liegt weiterhin in `localStorage`. Größere Architekturänderung erforderlich. |
|
||
| **Verweise** | `docs/compliance-audit.md` §10.3, §13.2 (SEC-02), §17 |
|
||
| **Hinweise** | **Drift-Hinweis:** In `docs/compliance-implementation.md` (vor Korrektur 2026-05-10) wurde der Inhalt „HttpOnly-Cookie-Migration" fälschlich P-11 zugeordnet. Der korrekte Titel gehört zu P-18. Korrigiert in `docs/compliance-implementation.md`. |
|
||
|
||
---
|
||
|
||
### P-19 – Anti-Virus-Scan (ClamAV)
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Anti-Virus-Scan für Uploads (ClamAV oder vergleichbar) |
|
||
| **Findings** | NIED-02, SEC-10 |
|
||
| **Etappe** | 4 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. Hoher Aufwand, Risiko bei lokalem Storage gering. |
|
||
| **Verweise** | `docs/compliance-audit.md` §13.2 (SEC-10), §16 (NIED-02), §17 |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
### P-20 – VVT erstellen
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | Verzeichnis der Verarbeitungstätigkeiten (VVT) erstellen (DSGVO Art. 30) |
|
||
| **Findings** | MITT-03 |
|
||
| **Etappe** | 4 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. Betreiber-Aufgabe. Identifizierte Verarbeitungsvorgänge in `docs/compliance-audit.md` §11.1. |
|
||
| **Verweise** | `docs/compliance-audit.md` §11.1, §17, §19.6 |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
### P-21 – AV-Verträge abschließen
|
||
|
||
| Feld | Inhalt |
|
||
|------|--------|
|
||
| **Kanonischer Titel** | AV-Verträge mit Auftragsverarbeitern abschließen (SMTP, MediaWiki, OpenRouter) |
|
||
| **Findings** | MITT-04, MITT-07, MITT-08 |
|
||
| **Etappe** | 4 |
|
||
| **Status** | ❌ open |
|
||
| **Letzter Stand** | Nicht umgesetzt. Betreiber-Aufgabe. Drei identifizierte Auftragsverarbeiter ohne Vertrag. |
|
||
| **Verweise** | `docs/compliance-audit.md` §11.3, §17, §19.6 |
|
||
| **Hinweise** | Keine Nummerierungsabweichung festgestellt. |
|
||
|
||
---
|
||
|
||
## Übersichtstabelle aller Pakete
|
||
|
||
| ID | Kanonischer Titel | Etappe | Findings | Status |
|
||
|----|------------------|--------|----------|--------|
|
||
| P-01 | Rechtstexte | 1 | KRIT-01 | ⚠️ partially implemented |
|
||
| P-02 | Self-Service-Kontolöschung + Datenexport | 1 | KRIT-02, KRIT-05 | ❌ open |
|
||
| P-03 | Papierkorb-Retention-Job aktivieren | 1 | KRIT-07 | ✅ implemented |
|
||
| P-03b | _Nacharbeit:_ Retention-Zeiten mit Löschkonzept abgleichen | — | — | ✅ implemented |
|
||
| P-04 | Copyright-Pflicht für Archiv-Promotion vereinheitlichen | 1 | KRIT-06 | ✅ implemented |
|
||
| P-05 | Passwort-Mindestlänge angleichen | 1 | MITT-01, SEC-04, SEC-12, NIED-06 | ✅ implemented |
|
||
| P-05b | _Nacharbeit:_ reset-password Mindestlänge | — | — | ✅ implemented |
|
||
| P-06 | Upload-Einwilligungsdialog | 1 | KRIT-04 | ⚠️ teilweise (KRIT-04 offen) |
|
||
| P-07 | ALLOW_PUBLIC_MEDIA_STATIC dokumentieren + Test | 2 | HOCH-01, SEC-05 | ✅ implemented |
|
||
| P-08 | HSTS / externe Proxy-Sicherheit dokumentieren | 2 | HOCH-02, SEC-01 | ❌ open |
|
||
| P-09 | Admin-Audit-Log | 2 | HOCH-05, SEC-07 | ❌ open |
|
||
| P-10 | Mindestalter-Abfrage | 2 | HOCH-06 | ❌ open |
|
||
| P-11 | Legal-Hold Lifecycle-Status | 2 | MITT-02 | ❌ open |
|
||
| P-12 | sessionStorage bei Logout bereinigen | 2 | MITT-05 | ✅ implemented |
|
||
| P-13 | Content-Melde-Backend | 3 | KRIT-03 | ❌ open |
|
||
| P-14 | Moderations-UI | 3 | KRIT-03 | ❌ open |
|
||
| P-15 | Uploader-Benachrichtigung bei Sperrung | 3 | KRIT-03 | ❌ open |
|
||
| P-16 | Beschwerdeverfahren | 3 | KRIT-03 | ❌ open |
|
||
| P-17 | MFA für Superadmins (TOTP) | 4 | HOCH-04, SEC-06 | ❌ open |
|
||
| P-18 | HttpOnly-Cookie als Auth-Alternative | 4 | HOCH-03, SEC-02 | ❌ open |
|
||
| P-19 | Anti-Virus-Scan (ClamAV) | 4 | NIED-02, SEC-10 | ❌ open |
|
||
| P-20 | VVT erstellen | 4 | MITT-03 | ❌ open |
|
||
| P-21 | AV-Verträge abschließen | 4 | MITT-04, MITT-07, MITT-08 | ❌ open |
|
||
| P-22 | HTML-Sanitizer für Rich-Text-Felder | 2 | NIED-09, SEC-11 | ❌ open |
|
||
| P-23 | LoginPage: minLength angleichen + Versionsstring entfernen | 2 | NIED-06, NIED-07, SEC-12, SEC-13 | ✅ implemented |
|
||
| P-24 | CORS einschränken (Methoden + Header) | 2 | NIED-08, SEC-14 | ✅ implemented |
|
||
|
||
---
|
||
|
||
## Fortschritt
|
||
|
||
**Implementiert (vollständig):** P-03, P-03b, P-04, P-05, P-05b, P-07, P-12, P-23, P-24 — 9 Pakete (inkl. 2 Nacharbeiten)
|
||
**Teilweise implementiert:** P-01 (technischer Teil vollständig inkl. P-01b, P-01c, copy-as-draft, jsPDF; juristische Inhalte offen) — 1 Paket
|
||
**Teilweise umgesetzt (KRIT offen):** P-06 (Upload-Einwilligungsdialog — KRIT-04 ausstehend)
|
||
**Offen:** P-02, P-08, P-09, P-10, P-11, P-13, P-14, P-15, P-16, P-17, P-18, P-19, P-20, P-21, P-22 — 15 Pakete
|
||
**App-Version bei letzter Aktualisierung:** 0.8.74
|
||
**Letztes Umsetzungsdatum:** 2026-05-10
|
||
|
||
---
|
||
|
||
*Erstellt: 2026-05-10 | Quelle: `docs/compliance-audit.md` (Initial-Audit 2026-05-09) | Kein Rechtsanwalt; alle rechtlichen Einschätzungen sind juristisch zu prüfen.*
|