PdfDragButton: echten Datei-Inhalt (Blob) ziehen statt Link
Thunderbird & Co. hatten beim URL-basierten Drag nur einen LINK als Anhang gespeichert (0 Bytes) und die Datei erst beim Senden nachgeladen -> Fehler, weil kurzlebiger Token abgelaufen. Der User erwartet, dass die Datei direkt angehaengt wird, nicht der Link. Loesung: Datei wird vorab per Bearer-Auth (Axios-Instanz) als Blob geladen und beim dragstart als echter Datei-Inhalt uebergeben: dataTransfer.items.add(File) + DownloadURL mit lokaler blob:-URL. -> Datei-INHALT wird uebertragen, kein Link. Blob wird beim Mount vorgeladen (Ladezustand 'laedt ...'); der Endpoint /files/download schreibt kein Audit-Log, daher kein Spam. Security R131 damit vollstaendig erledigt: im Drag steckt weder eine Server-URL noch ein Token -> ein Fehl-Drop kann gar nichts mehr leaken (kein Access-, kein Download-Token). Token-Cache/getDownloadToken im Drag-Pfad entfernt. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+13
-9
@@ -114,15 +114,19 @@ isolierte Instanz (keine Multi-Tenancy im Code), Provisioning + Abrechnung
|
||||
unverändert) – kein neuer Endpoint, keine neue Angriffsfläche. Ausweitung
|
||||
auf weitere PDF-Stellen (Rechnungen, Vertragsdoks, Datenschutz) folgt bei
|
||||
Bedarf über dieselbe Komponente.
|
||||
- **Nachtrag Pentest R131 (LOW-MEDIUM, gefixt):** Erste Version hängte den
|
||||
15-Min-Access-Token an und schrieb ihn per `text/plain`/`text/uri-list`
|
||||
beim Drag mit → Fehl-Drop in ein Textfeld hätte den Voll-Token als
|
||||
lesbaren Text geleakt. Fix: (a) kurzlebiger 60s-Download-Token
|
||||
(`authApi.getDownloadToken()`, `type:"download"`, nur `?token=`) statt
|
||||
Access-Token – modul-weiter Cache, auf mount+hover vorgewärmt; (b) NUR
|
||||
noch `DownloadURL` im DataTransfer, keine text/plain-Repräsentation →
|
||||
Fehl-Drop in Text-/Chat-Feld erzeugt gar nichts. Klick-Vorschau nutzt
|
||||
ebenfalls bevorzugt den Download-Token.
|
||||
- **Nachtrag Pentest R131 + Funktions-Iteration → Blob-Ansatz (final):**
|
||||
Zwischenstände (Access-Token → 60s-Download-Token, Text-Formate raus/rein)
|
||||
hatten entweder ein Token-Leak-Risiko ODER hängten nur einen LINK an
|
||||
(Thunderbird lud die URL erst beim Senden → 0 Bytes / Fehler, Token
|
||||
abgelaufen). Endstand: Datei wird VORAB per Bearer-Auth als **Blob**
|
||||
geladen und beim Drag als echter Datei-Inhalt übergeben
|
||||
(`dataTransfer.items.add(File)` + `DownloadURL` mit lokaler `blob:`-URL).
|
||||
→ Es wird der DATEI-INHALT übertragen, kein Link. Sicherheit R131 damit
|
||||
vollständig erledigt: im Drag steckt WEDER Server-URL NOCH Token, ein
|
||||
Fehl-Drop kann nichts mehr leaken. Blob wird beim Mount vorgeladen
|
||||
(Ladezustand „lädt …", `/files/download` schreibt kein Audit-Log, daher
|
||||
kein Audit-Spam). Zuverlässiges Datei-Drop v.a. in Chromium; Ziele ohne
|
||||
File-Annahme → Klick-Fallback (Tab öffnen, manuell anhängen).
|
||||
|
||||
- [x] **📋 Vertragsformular: Copy-Buttons für Bankkarte (IBAN) + Ausweis** (2026-07-30)
|
||||
- In „Kundendaten verknüpfen" je ein Kopieren-Button neben dem Label,
|
||||
|
||||
Reference in New Issue
Block a user