Das System zum Empfangen von Dateien von Benutzern ist bequem, kann jedoch ernsthafte Sicherheitsanfälligkeiten aufweisen, wenn es nicht ordnungsgemäß designed ist. Angreifer können versuchen, Uploads auszunutzen, um beliebigen Code auszuführen, Serverkapazitäten zu erschöpfen oder schadhafter Dateien zu verteilen.
Die häufigsten Bedrohungen sind:
Die Grundregel der Schutzmaßnahmen ist „Abwehr in der Tiefe (Defense in Depth)“. Es ist effektiv, mehrere Verteidigungsebenen zu überlagern, anstatt sich auf nur eine Maßnahme zu verlassen.
Begrenzen Sie die erlaubten Dateiendungen und entscheiden Sie nicht nur anhand der Endung über Akzeptanz oder Ablehnung. Überprüfen Sie die Dateisignatur (Magic Number), um den Inhalt zu validieren. Vertrauen Sie nicht auf den Content-Type-Header und implementieren Sie Maßnahmen zur Verhinderung von Mehrfacherweiterungen oder NULL-Bytes.
Speichern Sie die vom Benutzer bereitgestellten Dateinamen nicht unverändert. Ersetzen Sie sie durch eindeutige Namen mittels UUID oder Hash plus Zeitstempel und speichern Sie den Original-Dateinamen als Metadateneintrag separat. Berücksichtigen Sie auch Sonderzeichen und Längenbeschränkungen.
Hochgeladene Dateien sollten außerhalb des Webroots gespeichert werden, damit sie nicht direkt ausgeführt werden können. Wenn möglich, speichern Sie in einem speziellen Objekt-Speicher (z.B. S3) und generieren Sie Download-Links über die Anwendung. Das Speicherverzeichnis sollte ohne Ausführungsrechte und mit minimalen Lese- und Schreibrechten gestaltet werden.
Setzen Sie eine Obergrenze für die Dateigröße und führen Sie Kontrollen über die gleichzeitigen Uploads sowie das Rate-Limit durch, um die Verfügbarkeit des Dienstes sicherzustellen. Wenn komprimierte Dateien (z.B. ZIP) akzeptiert werden, müssen auch die einzelnen Dateien nach dem Entpacken überprüft werden.
Führen Sie sofort nach dem Upload einen Virus-Scan (wenn möglich mit mehreren Engines) durch, und neutralisieren Sie PDF/Office-Dokumente mit CDR (Content Disarm & Reconstruct). Bei Bildern ist es effektiv, sie neu zu kodieren (Laden → Neue Datei generieren), um schadhafte eingebettete Daten zu entfernen.
Alle Kommunikationen müssen durch TLS (HTTPS) geschützt werden, und setzen Sie Maßnahmen wie CSRF-Token um. Fügen Sie bei Downloadantworten Content-Disposition: attachment
und X-Content-Type-Options: nosniff
hinzu, um falsches Verhalten des Browsers zu verhindern.
Protokollieren Sie ausführlich, wer wann welche Dateien bearbeitet hat, und setzen Sie Alarme für unnormal Verhalten (z.B. häufige Uploads oder viele Ablehnungen) ein. Es ist auch sinnvoll, Hashes zur Gewährleistung der Dateiintegrität zu speichern.
Führen Sie nach der Implementierung spezielle Sicherheitstests für Dateiuploads (Shell-Injection, Umgehung von Dateiendungen, Path Traversal usw.) durch und führen Sie regelmäßige Überprüfungen durch.
Hier wird UploadF (uploadf.com) vorgestellt, das sowohl für PC als auch Smartphones ausgelegt ist, Drag & Drop ermöglicht und gleichzeitige Uploads von 100 Dateien unterstützt. Allerdings sollten bei der Dienstplanung die folgenden Punkte und Ideen berücksichtigt werden.
Überprüfungspunkt | Durchzuführende/zu überprüfende Punkte |
---|---|
Whitelisting von Dateiendungen | Nur notwendige Formate erlauben. Die Blacklist wird ergänzend verwendet. |
MIME-/Signaturüberprüfung | Überprüfung, ob Dateiendung und Inhalt übereinstimmen (Magic Number prüfen). |
Umbenennung von Dateinamen | Austausch gegen UUID oder Hashnamen und Verwaltung des Originalnamens als Metadaten. |
Entfernung von Sonderzeichen | Entfernung oder Ablehnung von `/`, `\`, `..`, NULL usw. |
Speicherverzeichnis | Speicher außerhalb des Webroots oder in einem Objekt-Speicher. |
Ordnerberechtigungen | Ausführung verbieten, minimale Lese- und Schreibrechte (Principle of Least Privilege). |
Maximale/Minimale Dateigröße | Grenzen klar definieren und Überprüfung nach Entpacken (z.B. ZIP). |
Kontrolle gleichzeitiger Uploads | Begrenzung der Parallelität, Rate Limiting, Timeouts. |
Virus-Scans / CDR | Sofortige Scans nach dem Upload und gegebenenfalls Neutralisationsprozesse. |
Kommunikationsverschlüsselung (HTTPS) | TLS verpflichtend machen (Verhinderung von Man-in-the-Middle-Angriffen). |
CSRF-Prävention | Token-basiert Überprüfungen einführen. |
Antwort-Header-Einstellungen | Content-Disposition: attachment , X-Content-Type-Options: nosniff usw. hinzufügen. |
Protokollierung & Alarme | Uploadaktionen auditieren und bei Unregelmäßigkeiten benachrichtigen. |
Regelmäßige Sicherheitsüberprüfungen | Regelmäßige Durchführung von Sicherheitstests und Penetrationstests. |
Automatisches Löschen alter Dateien | Design für vollständiges Löschen nach Ablauf der Aufbewahrungsfrist. |
Zugriffskontrolle/Berechtigung | Strikte Verwaltung von Zugriffsrechten auf Benutzerebene/Gruppenebene. |
Die Funktionalität des Dateiuploads bietet sowohl Bequemlichkeit als auch Risiken. Durch die Implementierung der in diesem Artikel dargestellten Mehrschichtenverteidigung (Whitelisting, Signaturüberprüfungen, Trennung der Speicherorte, Malware-Prävention, Protokollüberwachung usw.) kann das Angriffsrisiko erheblich gesenkt werden.
Es ist wichtig, dass Benutzer die Funktionen als „einfach zu verwenden und gleichzeitig sicher“ empfinden. Dienste wie UploadF (uploadf.com), die Funktionen wie Einzelentfernung und Aufbewahrungszeitraum bieten, bei denen Nutzer die Kontrolle haben, vermitteln ein Gefühl von Sicherheit.
※ Die oben genannten Quellen sind Beispiele aus dem Zeitpunkt der Erstellung des Artikels. Für detailliertere Implementierungsunterlagen und die neuesten Bedrohungsinformationen beachten Sie bitte die offiziellen Dokumente.