Section 01
Simple Explanation
Ein echter Upload bedeutet: Der Admin wählt eine echte Datei auf seinem Computer aus, und diese Datei wird an das Backend gesendet.
Das Backend darf diese Datei aber nicht blind akzeptieren. Jede Datei muss zuerst geprüft werden. Erst danach darf sie in einen privaten Speicherbereich gelegt und einem Kunden oder Dokument zugeordnet werden.
Der wichtigste Grundsatz bleibt: Eine hochgeladene Datei ist zuerst unsicher, bis das Backend sie geprüft hat.
Section 02
Simulation vs Real Upload
| Bereich | Simulation v0.21 | Echter Upload später |
|---|---|---|
| Datei | Keine echte Datei | Echte Datei wird übertragen |
| Prüfung | Dateiname, Endung, Größe, Client, Dokument | Zusätzlich MIME-Type, Magic Bytes, Malware Scan |
| Speicherung | Nur simulierte Folder-Entscheidung | Echte Datei wird in private-storage gespeichert |
| Download | Nur vorbereitet | Backend liefert Datei nur nach Rechteprüfung aus |
| Audit Log | Simulation wird protokolliert | Jeder Upload, jede Prüfung und jeder Download wird protokolliert |
Section 03
Real Upload Flow
| Schritt | Was passiert? | Warum wichtig? |
|---|---|---|
| 1 | Admin öffnet geschützte Upload-Seite. | Nur Admin oder Super Admin darf Upload nutzen. |
| 2 | Admin wählt Datei, Kunde und Dokument aus. | Keine Datei ohne Zuordnung. |
| 3 | Browser sendet Datei an Backend. | Backend ist die Kontrollstelle. |
| 4 | Backend prüft Dateigröße und Dateiname. | Schutz vor zu großen oder gefährlichen Uploads. |
| 5 | Backend prüft Extension, MIME-Type und Datei-Signatur. | Eine Datei kann falsch benannt sein. |
| 6 | Datei landet zuerst in incoming oder quarantine. | Neue Dateien werden nicht sofort freigegeben. |
| 7 | Admin oder System gibt Datei frei. | Erst geprüfte Dateien werden nutzbar. |
| 8 | Datei wird über geschützte Backend-Route ausgeliefert. | Kein öffentlicher Direktlink. |
Section 04
Required Security Checks
| Check | Einfach erklärt | Status |
|---|---|---|
| Admin Role Check | Nur Admins dürfen Dateien hochladen. | Bereits vorbereitet |
| File Size Check | Datei darf nicht zu groß sein. | In Simulation vorbereitet |
| Extension Check | Dateiendung muss erlaubt sein. | In Simulation vorbereitet |
| MIME-Type Check | Backend prüft den gemeldeten Dateityp. | Noch zu bauen |
| Magic Bytes Check | Backend prüft die echte Datei-Signatur. | Noch zu bauen |
| Neutral File Name | Dateiname darf keine Kundendaten verraten. | In Simulation vorbereitet |
| Malware Scan | Datei wird später auf Schadsoftware geprüft. | Produktionsbaustein |
| Audit Log | Upload und Prüfung werden protokolliert. | Bereits vorbereitet |
Section 05
Storage Logic
Echte Kundendateien dürfen später niemals im öffentlichen public-Ordner liegen. Sie müssen in einem privaten Speicherbereich liegen.
| Ordner | Zweck | Öffentlich? |
|---|---|---|
| private-storage/file-intake/incoming | Neue Uploads kommen zuerst hier an. | Nein |
| private-storage/file-intake/quarantine | Verdächtige Dateien werden isoliert. | Nein |
| private-storage/file-intake/approved | Freigegebene Dateien liegen hier. | Nein |
| private-storage/file-intake/rejected | Abgelehnte Dateien liegen hier. | Nein |
Section 06
Database Logic
Später reicht es nicht, die Datei nur zu speichern. Das System muss auch wissen, wem die Datei gehört und wer sie sehen darf.
| Datenfeld | Warum notwendig? |
|---|---|
| fileId | Eindeutige interne ID für die Datei. |
| clientId | Zu welchem Kundenraum gehört die Datei? |
| documentId | Welchem Dokumentensatz ist die Datei zugeordnet? |
| storagePath | Wo liegt die Datei intern? |
| originalName | Wie hieß die Datei beim Upload? |
| neutralName | Wie heißt die Datei intern sicher? |
| status | incoming, quarantine, approved oder rejected. |
| uploadedBy | Welcher Admin hat die Datei hochgeladen? |
| createdAt | Wann wurde die Datei hochgeladen? |
Section 07
Audit Log
Jeder echte Upload muss später protokolliert werden. Das Audit Log soll aber keine sensiblen Dateiinhalte speichern.
| Event | Wann? |
|---|---|
| UPLOAD_RECEIVED | Wenn das Backend eine Datei entgegennimmt. |
| UPLOAD_REJECTED | Wenn die Datei blockiert wird. |
| UPLOAD_QUARANTINED | Wenn die Datei isoliert wird. |
| UPLOAD_APPROVED | Wenn die Datei freigegeben wird. |
| DOCUMENT_DELIVERY_ALLOWED | Wenn eine Datei geschützt ausgeliefert wird. |
| DOCUMENT_DELIVERY_BLOCKED | Wenn ein Zugriff blockiert wird. |
Section 08
Next Step
Der nächste technische Schritt ist ein echter lokaler Upload-Prototyp. Dafür brauchen wir ein Upload-Paket im Backend, damit der Browser eine Datei an Express senden kann.
Wir werden dabei weiterhin nur Demo-Dateien verwenden und keine echten Kundendaten.
| Nächster Baustein | Beschreibung |
|---|---|
| Phase 4R | Local Real Upload Foundation mit Demo-Dateien und geschütztem Admin-Zugriff. |