58430a0903
Datenschutz:
Überprüfung der Anwendung hinsichtlich Datenschutz und Datensicherheit.
Keine unnötigen Berechtigungen
Keine sensiblen Logs
Sichere Dateispeicherung
Backup-Verhalten geprüft
Datenschutz-Dokumentation erstellt
usw.
4.5 KiB
4.5 KiB
QA-006 – Datenschutz-Review: Befunde und Maßnahmen
Geprüft wurde der Projektstand dev-QA004 (Manifest, Backup-Regeln, FileProvider, Quelltext,
Abhängigkeiten, Speicher-, Lösch- und Exportabläufe). Die App wurde nicht auf einem Gerät
dynamisch untersucht (kein Netzwerk-Mitschnitt, kein Test der Hersteller-Kamera-App).
Bereits gut umgesetzt (keine Änderung nötig)
| Prüfpunkt | Ergebnis |
|---|---|
| Berechtigungen | Keine deklariert; Photo Picker und System-Kamera-App statt eigener Kamera-/Speicherzugriffe |
| Netzwerk | Kein Netzwerkcode, keine Netzwerk-/Tracking-Bibliotheken |
| Backup | allowBackup=false und data_extraction_rules (Cloud-Backup + Geräte-Transfer) schließen alles aus |
| Speicherort | Nur privater interner Speicher, kein öffentlicher/externer Speicher |
| Bildschirm | FLAG_SECURE (keine Screenshots, keine App-Wechsler-Vorschau) |
| Komponenten | Nur MainActivity exportiert; FileProvider nicht exportiert |
| Share-Intents | Nur Datei (EXTRA_STREAM), kein Text/Betreff mit Patientendaten |
| Datenbank | Keine destruktive Migration (kein stiller Datenverlust bei Updates) |
| Metadaten in Fotos | Beim Import neu kodiert → GPS/EXIF des Originals wird nicht übernommen |
| Fehlermeldungen in der UI | Ohne Pfade/Exception-Texte |
Befunde und umgesetzte Maßnahmen
| Nr. | Befund | Schwere | Maßnahme | Datei(en) |
|---|---|---|---|---|
| B1 | Log beim Fotoimport schrieb e.message. Bei Dateifehlern enthält die Meldung häufig Pfad bzw. Bild-URI – entgegen dem Kommentar im Code. |
mittel | Es wird nur noch der Exception-Typ geloggt. | DocumentationEditViewModel.kt |
| B2 | PDF- und Bildexporte blieben nach dem Löschen einer Dokumentation im Speicher (enthalten Name, Geburtsdatum, Anschrift, Befund, Fotos). | hoch | Löschen der Dokumentation entfernt jetzt auch pdf/<id>/ und pdf_images/<id>/. |
ExportedFilesCleaner.kt (neu), DocumentationRepository.kt, AppContainer.kt |
| B3 | Exporte hatten keine Aufbewahrungsfrist. Alte PDFs lagen unbegrenzt im App-Speicher. | mittel | Beim App-Start werden Exporte älter als 7 Tage gelöscht (jederzeit neu erzeugbar). | ExportedFilesCleaner.kt, WunddokuApplication.kt |
| B4 | Kameraaufnahmen konnten im Cache liegen bleiben, wenn die App zwischen Aufnahme und Import beendet wurde. | gering–mittel | Aufnahmen älter als 24 h werden beim App-Start gelöscht (Frist bewusst lang, damit eine noch ausstehende Aufnahme nach einem Neustart importierbar bleibt). | ExportedFilesCleaner.kt |
| B5 | FileProvider gab photos/ und signatures/ frei, obwohl nie darüber geteilt wird. |
gering (Prinzip der minimalen Freigabe) | Freigaben auf pdf/, pdf_images/, cache/camera/ reduziert. |
file_paths.xml |
| B6 | INTERNET konnte über eine künftige Bibliothek unbemerkt ins Manifest gelangen. |
gering (Vorsorge) | INTERNET und ACCESS_NETWORK_STATE werden beim Manifest-Merge explizit entfernt. |
AndroidManifest.xml |
| B7 | Pfadauflösung ohne Traversal-Schutz (File(dir, name)). Namen stammen aus der eigenen DB (UUIDs), daher kein akutes Risiko. |
gering (Defense-in-Depth) | SafePaths.resolveChild in Foto-/Signatur-Speicher und Cleaner. |
SafePaths.kt (neu), PhotoStorage.kt, SignatureStorage.kt |
Offene Punkte (bewusst NICHT geändert – Produktentscheidung nötig)
| Nr. | Thema | Empfehlung |
|---|---|---|
| O1 | Datenbank/Dateien nicht zusätzlich verschlüsselt (Restrisiko R1) | Bei erhöhtem Schutzbedarf SQLCipher + Android Keystore; sonst Geräteverschlüsselung + Sperre vorschreiben |
| O2 | Keine App-Sperre (PIN/Biometrie) (R2) | BiometricPrompt beim Start/Wiederöffnen erwägen |
| O3 | PDF-Dateiname enthält Name + Geburtsdatum (R4) | Neutralen Dateinamen als Option; würde PdfFileNameGenerator und dessen Tests ändern |
| O4 | Tastatur-Lernfunktion/Autofill (R3) | Geräterichtlinie; in Compose nur eingeschränkt steuerbar |
| O5 | isMinifyEnabled = false (R6) |
R8 vor Veröffentlichung aktivieren und Release-Build testen |
| O6 | Dynamische Prüfung auf echten Geräten (Netzwerkmitschnitt, Hersteller-Kamera, Galerie-Kopien) | Vor Produktivbetrieb einmal durchführen |
Wichtig zu den Änderungen B2/B3
B2 und B3 ändern das Verhalten: Exportierte PDFs verschwinden nach 7 Tagen und beim Löschen der
Dokumentation. Wenn die App PDFs länger vorhalten soll, DEFAULT_EXPORT_MAX_AGE_MILLIS in
InternalExportedFilesCleaner erhöhen. Bereits geteilte Kopien in anderen Apps sind davon
natürlich nicht betroffen.