Upload-Schutz: Kontrollieren Sie, Was Hereinkommt
Der Ordner /uploads ist der Ort, an dem Bilder, Dokumente und von Benutzern hochgeladene Dateien gespeichert werden. Er ist ein perfekter Einstiegspunkt für Angreifer, weil:
- Er ist öffentlich zugänglich
- Viele Benutzer können Dateien hochladen
- Ist er nicht geschützt, kann ein Benutzer eine .php-Datei hochladen, die ausgeführt wird
Der Upload-Schutz von SeenSecure prüft JEDE hochgeladene Datei: ihren Typ, ihre Größe, ihren Inhalt. Wird etwas Verdächtiges erkannt, wird es immer protokolliert und, wenn die Firewall im Blockierungsmodus ist, zusätzlich sofort abgelehnt.
Bedrohungen für Uploads
1. Hochladen Ausführbarer Dateien
Ein Angreifer lädt eine .php-Datei hoch, die beim Zugriff bösartigen Code ausführt.
upload.php → enthält PHP-Code → Angreifer führt Befehle auf Ihrem Server aus
2. Erweiterungsänderung
Der Angreifer lädt eine .php-Datei hoch, benennt sie aber in .jpg um, um einfache Validierungen zu umgehen.
malware.php → umbenannt in → photo.jpg (bleibt aber PHP)
3. Polymorphismus
Malware, die ihren Code mutiert, um der Antiviren-Erkennung zu entgehen. Jede Kopie ist anders.
4. ZIP-Bomben-Datei
Eine komprimierte Datei, die 1000 GB an Daten enthält. Beim Entpacken verbraucht sie den gesamten Speicherplatz des Servers.
5. Metadaten-Injektion
Malware, die in Bildmetadaten (EXIF) eingefügt wird. Wenn WordPress das Bild ohne Bereinigung verarbeitet, wird Code ausgeführt.
| Angriffstyp | Gefährlichkeit | Erkennung |
|---|---|---|
| Direkter .php-Upload | ⭐⭐⭐⭐⭐ | Sehr einfach |
| Gefälschte Erweiterung | ⭐⭐⭐⭐ | Einfach |
| Polymorphismus | ⭐⭐⭐ | Schwierig |
| Metadaten | ⭐⭐⭐ | Sehr schwierig |
Was Schützt der Upload-Schutz?
Jede auf dein WordPress hochgeladene Datei durchläuft 6 unabhängige Prüfungen, bevor sie gespeichert wird —schlägt eine davon fehl, wird der Versuch protokolliert und, im Blockierungsmodus der Firewall, abgelehnt. Es handelt sich nicht um eine Positivliste, die nur bestimmte Formate erlaubt, sondern um eine konfigurierbare Negativliste des Gefährlichen, kombiniert mit Prüfungen, die den tatsächlichen Inhalt der Datei untersuchen, nicht nur ihren Namen. Für jede Schicht erklären wir, wofür sie dient, warum ein Angreifer sie nutzt und wie SeenSecure handelt, um sie zu stoppen.
1. Dateigrößenlimit
Wofür dieser Schutz dient: Jede hochgeladene Datei verbraucht Speicherplatz auf deinem Server. Ohne Limit könnte jeder Benutzer mit Upload-Berechtigung — oder ein schlecht geschütztes öffentliches Formular, etwa ein Kontakt-Plugin oder ein Kommentarformular mit Anhängen — unverhältnismäßig große Dateien senden, den verfügbaren Speicherplatz aufbrauchen oder den Server während der Verarbeitung des Uploads beschäftigt halten.
Warum ein Angreifer es versucht: Das Hochladen unverhältnismäßig großer Dateien ist eine einfache Form eines Denial-of-Service-Angriffs (DoS): die Festplatte füllen, bis WordPress nichts mehr schreiben kann — nicht einmal einen Beitrag speichern oder ein Backup erstellen — oder den Server zwingen, wiederholt Ressourcen für die Verarbeitung riesiger Dateien aufzuwenden.
Reales Beispiel: Ein Avatar-Upload-Formular, gedacht für Bilder von wenigen hundert KB, erhält eine 800-MB-Datei, die wiederholt von mehreren IPs gesendet wird. Ohne Größenlimit wird jeder Versuch angenommen und verarbeitet, bis der Speicherplatz aufgebraucht ist.
So funktioniert es: SeenSecure vergleicht die Größe der empfangenen Datei mit einem einzigen, von dir konfigurierten Limit in Megabyte (standardmäßig 10MB, angewendet auf jeden Dateityp). Wird es überschritten, wird der Versuch protokolliert, und im Blockierungsmodus der Firewall wird der Upload abgelehnt, bevor er dauerhaft in deiner Mediathek gespeichert wird.
2. Blockierte Erweiterungen (Sperrliste)
Wofür dieser Schutz dient: Die Erweiterung einer Datei (.php, .exe, .jpg...) sagt dem Server, wie er sie behandeln soll. Manche Erweiterungen — vor allem solche, die ein PHP-fähiger Server als Code ausführen kann — sind gefährlich, wenn sie in einem öffentlich zugänglichen Ordner wie /wp-content/uploads landen: Greift jemand direkt auf diese URL zu, zeigt der Server die Datei nicht nur an, sondern führt sie aus.
Warum ein Angreifer es versucht: Gelingt es einem Angreifer, eine Datei mit ausführbarer Erweiterung (typischerweise .php) in einen öffentlich zugänglichen Ordner hochzuladen, erhält er eine sogenannte "Web-Shell": einen dauerhaften Einstiegspunkt, von dem aus er Befehle ausführen, Dateien lesen und ändern oder weitere Malware installieren kann, ohne sich je wieder bei WordPress authentifizieren zu müssen.
Reales Beispiel: Ein Angreifer versucht, eine Datei namens shell.php über ein Dokument-Upload-Formular hochzuladen. SeenSecure vergleicht ihre Erweiterung mit der Liste blockierter Erweiterungen — die Varianten wie .php3, .phtml und .phar sowie Ausführbare wie .exe, .sh und .bat umfasst — und lehnt den Upload ab, bevor die Datei gespeichert wird.
So funktioniert es: Im Gegensatz zu einer Positivliste (die nur bestimmte Erweiterungen erlauben und alles andere blockieren würde) verwendet SeenSecure eine konfigurierbare Negativliste bekannter gefährlicher Erweiterungen — PHP-Varianten, Ausführbare, Server-Skripte —, die du im Panel anpassen kannst, indem du Erweiterungen hinzufügst oder entfernst, je nachdem, was deine Website hochladen muss. Das Entfernen der standardmäßigen ausführbaren Erweiterungen wird nicht empfohlen, außer du weißt genau, was du tust.
3. Blockierte MIME-Typen und Echte Inhaltsprüfung
Wofür dieser Schutz dient: Die Erweiterung einer Datei ist nur ein Etikett im Namen — jeder kann malware.php in foto.jpg umbenennen, ohne dass sich der Inhalt um ein einziges Byte ändert. Der MIME-Typ beschreibt, was die Datei tatsächlich ist, und ihn zu prüfen verhindert, dass eine Datei nur wegen des "richtigen" Etiketts durchrutscht.
Warum ein Angreifer es versucht: Das Umbenennen der Erweiterung ist der erste Trick, den jeder Angreifer versucht, sobald er entdeckt, dass es eine Liste blockierter Erweiterungen gibt — es ist schnell, erfordert keine fortgeschrittenen Kenntnisse und funktioniert gegen Systeme, die nur den Dateinamen betrachten, ohne den Inhalt zu prüfen.
Reales Beispiel: Eine Datei namens bild.gif wird mit dem vom Browser deklarierten MIME-Typ (image/gif) hochgeladen, aber bei der Untersuchung ihrer tatsächlichen ersten Bytes stellt der Server fest, dass es sich in Wirklichkeit um application/x-php handelt. SeenSecure erkennt die Diskrepanz und lehnt die Datei ab, obwohl Name und deklarierter Header harmlos wirkten.
So funktioniert es: SeenSecure wendet zwei zusammenhängende Prüfungen an: Sie vergleicht den beim Upload deklarierten MIME-Typ mit ihrer Liste blockierter Typen und nutzt zudem eine Prüfung auf Systemebene (über die PHP-Bibliothek fileinfo), die den tatsächlichen Inhalt der Datei untersucht, um ihren wahren Typ zu bestimmen — unabhängig davon, was Name oder deklarierter Header aussagen. Stimmt dieser echte Typ mit einem blockierten überein, lehnt WordPress die Datei ab, selbst wenn ihre Erweiterung harmlos wirkte.
4. Inhaltsprüfung
Wofür dieser Schutz dient: Selbst eine Datei mit scheinbar korrekter Erweiterung und MIME-Typ kann bösartigen Code im Inneren verbergen — etwa PHP-Code, der an das Ende eines gültigen Bildes angehängt wurde, sodass die Datei weiterhin als normales Bild angezeigt wird und gleichzeitig als Skript interpretierbar ist, falls jemand den Server dazu bringt, sie auszuführen. Die Inhaltsprüfung fügt eine letzte Schicht hinzu, die untersucht, was tatsächlich in der Datei steckt.
Warum ein Angreifer es versucht: Die Kombination einer legitimen Datei (eines Bildes, das normal angezeigt und geladen wird) mit versteckt ausführbarem Code lässt oberflächliche Prüfungen von Erweiterung und deklariertem Typ passieren, und erst wenn der Angreifer durch eine andere Schwachstelle den Server dazu bringt, sie als Code statt als Bild zu interpretieren, zeigt sie sich als bösartig.
Reales Beispiel: Eine Datei foto.jpg besteht die Erweiterungs- und MIME-Prüfungen, weil ihr Header ein gültiges Bild ist, sie enthält jedoch zusätzlich ein <?php-Tag gefolgt von einer Funktion, die Systembefehle ausführen kann. SeenSecure liest den Inhalt der Datei, findet dieses Fragment und lehnt sie ab.
So funktioniert es: SeenSecure untersucht den Inhalt der hochgeladenen Datei auf Muster, die für bösartigen ausführbaren Code charakteristisch sind — Funktionen und Strukturen, die keinen legitimen Grund haben, in einem normalen Bild, PDF oder Dokument aufzutauchen. Es handelt sich weder um ein Antivirenprogramm mit Signaturen bekannter Viren noch um eine isolierte Ausführungsumgebung ("Sandbox"): Es ist eine Analyse des Inhalts auf verdächtige Fragmente, ohne die Datei jemals auszuführen.
5. Erkennung Doppelter Erweiterungen
Wofür dieser Schutz dient: Manche falsch konfigurierten Server verarbeiten bei einem Dateinamen wie bild.jpg.php nur die letzte erkannte Erweiterung — ist dieser letzte Teil .php, führen sie ihn als PHP-Code aus, unabhängig davon, dass der Rest des Namens wie ein Bild "aussieht". Dieser Schutz erkennt dieses verdächtige Namensmuster.
Warum ein Angreifer es versucht: Der Trick mit der doppelten Erweiterung versucht sowohl einfache Validierungssysteme (die nur prüfen, ob der Name irgendwo ".jpg enthält") als auch die Serverkonfiguration selbst zu täuschen, in der Hoffnung, dass diese die tatsächliche letzte Erweiterung (.php) ausführt, während der Name optisch wie eine harmlose Bilddatei aussieht.
Reales Beispiel: Ein Angreifer nennt seine Datei backdoor.jpg.php. Ein naiver Filter, der nur prüft, ob der Name ".jpg enthält", würde sie durchlassen; SeenSecure teilt den vollständigen Namen an seinen Punkten auf, prüft jedes Zwischenfragment gegen die Liste gefährlicher Erweiterungen, erkennt das .php und lehnt die Datei ab.
So funktioniert es: SeenSecure analysiert den vollständigen Dateinamen, nicht nur seine letzte Erweiterung, und sucht nach jeder bekannten gefährlichen Erweiterung an beliebiger Position im Namen — nicht nur am Ende —, um diese Art der Tarnung zu erkennen, bevor die Datei gespeichert wird.
6. Erkennung von Null-Bytes
Wofür dieser Schutz dient: Das Null-Byte ist ein Sonderzeichen, das in vielen systemnahen Programmiersprachen "Ende der Zeichenkette" bedeutet. Es ist eine alte, aber gegen schlecht geschriebenen Code immer noch wirksame Technik, um die Validierung von Dateinamen auszutricksen, indem das System einen anderen Namen "sieht" als den, der beim Speichern der Datei tatsächlich verwendet wird.
Warum ein Angreifer es versucht: Durch Einfügen eines Null-Bytes zwischen dem ausführbaren Teil eines Dateinamens und einer scheinbar harmlosen Erweiterung versucht ein Angreifer, die Validierung an der "sicheren" Erweiterung (allem vor dem Null-Byte) enden zu lassen, während das zugrundeliegende Dateisystem weiterhin den vollständigen Namen verarbeitet, einschließlich der echten, gefährlichen Erweiterung, die danach folgt.
Reales Beispiel: Eine Datei wird shell.php%00.jpg genannt (oder ihr Äquivalent mit dem tatsächlichen Null-Byte statt seiner Textdarstellung). Ein anfälliger Validator, der bei der ersten "gesehenen" Erweiterung stoppt, würde sie als harmloses .jpg behandeln; SeenSecure erkennt das Vorhandensein des Null-Bytes im Namen und lehnt sie direkt ab.
So funktioniert es: SeenSecure prüft, ob der Dateiname ein Null-Byte enthält, sowohl in seiner tatsächlichen binären Form als auch in seiner Textdarstellung (%00), und lehnt jeden Upload ab, der es enthält, ohne interpretieren zu müssen, welche Erweiterung auf einem falsch konfigurierten System "gewinnt".
Upload-Schutz Konfigurieren
Schritt 1: Schutz Aktivieren
SeenSecure > Firewall > Tab "Uploads" > "Upload-Schutz aktivieren" einschalten
Schritt 2: Blockierte Erweiterungen Überprüfen und Anpassen
Standardmäßig enthält die Liste bereits die gefährlichsten Erweiterungen (PHP-Varianten, Ausführbare, Server-Skripte) in einem durch Kommas getrennten Textfeld, das du frei bearbeiten kannst. Es ist keine Liste des "einzig Erlaubten": Jede Erweiterung, die nicht in dieser Liste steht, wird weiterhin normal akzeptiert, daher ist es nur sinnvoll, hier Formate hinzuzufügen, die du nicht benötigst und ausdrücklich blockieren möchtest.
Schritt 3: Größenlimit Festlegen
Es handelt sich um ein einziges Limit in Megabyte, das auf jede hochgeladene Datei angewendet wird, unabhängig vom Typ. Der Standardwert ist 10MB; wird 0 eingestellt, greift stattdessen das allgemeine Upload-Limit deines WordPress/Hostings. Passe die Zahl an das an, was du tatsächlich auf deine Website hochlädst (erhöhe sie z. B., wenn du Videos oder große PDFs akzeptieren musst).
Schritt 4: Erweiterte Schichten Aktivieren
- Dateiinhalt scannen: sucht nach PHP-Code, JavaScript und bösartigen Mustern innerhalb von Dateien, selbst wenn deren Erweiterung und deklarierter Typ harmlos wirken.
- Doppelte Erweiterung erkennen: blockiert Dateien wie
bild.jpg.php. - Null-Byte erkennen: blockiert Dateien mit Null-Byte im Namen, eine klassische Bypass-Technik.
Empfehlung: Alle 3 sind standardmäßig aktiviert und sollten es auch bleiben — jede deckt einen anderen Angriffswinkel ab, den die anderen Schichten allein nicht abdecken.
Schritt 5: Den Firewall-Modus Verstehen (Überwachung vs. Blockierung)
Was es bewirkt: Der Upload-Schutz hat keinen eigenen Schalter für "ablehnen / Quarantäne / benachrichtigen": Sein Verhalten bei einem Verstoß hängt vom allgemeinen Firewall-Modus ab (SeenSecure > Firewall > Modus). Im Überwachungsmodus wird jeder verdächtige Versuch protokolliert, die Datei aber trotzdem akzeptiert. In Schutz oder Strict wird die Datei sofort abgelehnt. Aktivierst du den Upload-Schutz, während die globale Firewall im Überwachungsmodus bleibt, siehst du Versuche im Protokoll, ohne dass tatsächlich etwas blockiert wird — überprüfe beide Einstellungen gemeinsam.
Schritt 6: Das Upload-Aktivitätsprotokoll Überprüfen
Derselbe Reiter Upload-Schutz enthält eine Tabelle mit den neuesten abgelehnten oder protokollierten Uploads: Zeit, Dateiname, Grund (blockierte Erweiterung, blockiertes MIME, doppelte Erweiterung, Null-Byte, bösartiger Inhalt oder überschrittene Größe), ob blockiert oder nur überwacht, Quell-IP und Benutzerrolle. Ein Button "Protokoll leeren" ermöglicht es dir, diese Historie jederzeit zu löschen.
Best Practices
Für Administratoren
- Halten Sie die Liste der erlaubten Erweiterungen so klein wie möglich
- Überprüfen Sie wöchentlich abgelehnte Uploads (SeenSecure > Firewall > Tab Uploads)
- Bei vielen legitimen Ablehnungen passen Sie die Konfiguration an (deaktivieren Sie sie nicht)
- Klären Sie Benutzer auf: Nicht jeder versteht, warum eine Datei abgelehnt wird
Für Benutzer
- Wenn Ihre Datei abgelehnt wird, hat das einen Sicherheitsgrund
- Wenn Sie diesen Dateityp hochladen müssen, kontaktieren Sie den Admin
- Komprimieren Sie große Bilder vor dem Hochladen (verbessert auch die Geschwindigkeit)
- Verwenden Sie sichere Dateinamen (ohne ungewöhnliche Zeichen)
Was Tun, Wenn Jemand Versucht, Malware Hochzuladen
- SeenSecure lehnt sie automatisch ab
- Überprüfen Sie das Protokoll: SeenSecure > Firewall > Tab Uploads
- Wenn es ein legitimer Benutzer ist, der es nicht wusste, erklären Sie es ihm
- Bei mehreren Versuchen von derselben IP, erwägen Sie eine vorübergehende Sperre
Häufig Gestellte Fragen
Fehlt mir Funktionalität, wenn ich SVG ablehne? Nicht viel. SVG ist sehr vielseitig, aber auch ein Angriffsvektor. Falls Sie es benötigen, verwenden Sie die "sichere" Version, die SeenSecure erlaubt.
Verlangsamt es den Upload? Geringfügig. Die Inhaltsanalyse fügt 1-2 Sekunden hinzu. Aber die Sicherheit ist es wert.
Was passiert, wenn ich versehentlich eine verbotene Datei hochlade? Sie wird abgelehnt, Sie sehen eine Fehlermeldung und versuchen es mit einer anderen Datei. Nichts Gefährliches.
Kann ich nur Admins erlauben, Videos hochzuladen? Der Upload-Schutz wendet dieselben Regeln für Erweiterung, Größe, MIME-Typ und Inhalt gleichermaßen auf alle Benutzer an — er verfügt über keine rollenbasierten Berechtigungseinstellungen. Wer Videodateien hochladen darf, ist eine Frage der WordPress-Rollen und -Fähigkeiten (oder eines speziellen Berechtigungs-Plugins), nicht dieses konkreten Schutzes.