Sicherer Upload

Pius Hermit

Erfahrenes Mitglied
Hi folks!
Ich wollte mir einmal einen Überblick verschaffen, wie ein sicherer Bilder-Upload funktionieren könnte: Ich habe gehört, dass rein theoretisch HTML-Elemente durch die Interpretation von schädlichen Dateien geändert/zerstört werden könnten. Wie ist das möglich, wenn ich serverseitig auf Dateityp prüfe? Könnte bereits die Anzeige eines
<img src=....
zum Ausführen von Scripts reichen? Wo liegen genau die Gefahren?
Und: Zur Vorauswahl für gutwillige User möchte ich den MIME-Typ image/jpeg
im Dateiauswahlfenster angeben (JS), doch
accept=...
hat leider keine Wirkung!:confused:
Über Hilfe würde ich mich riesig freuen,
LG,
Ulrich
 
Moin,

dass ein HTML-Element durch schädliche Dateien(Bilder) zerstört wird, ist mir neu, aber wäre zu Verkraften :-)

Was die Attribute des Upload-Feldes betrifft, welche eine Vorabprüfung des Uploads erlauben, ...ich kann mich nicht entsinnen, mal erlebt zu Haben, dass dies in irgendeinem Browser funktioniert :suspekt:

Von daher solltest du dich eher auf die serverseitige Prüfung konzentrieren.

Ob es eine Grafik ist und was für eine, kannst du per getImageSize() sicher prüfen(die Prüfung des MIME-Types kannst du dir sparen, getImageSize() sagt dir schon, was für eine Grafik es ist).
Ob die Datei die erlaubte Grösse nicht übersteigt, kannst du ebenfalls serverseitig Prüfen.
Beim kopieren ins Zielverzeichnis solltest du sicherstellen, dass nicht die Original-Dateiendung ungeprüft beibehalten wird, benenne die Datei ggf. anhand ihres wirklichen Grafik-Typs um.

Du solltest weiterhin sicherstellen, dass in dem Verzeichnis, in welches die Bilder kopiert werden, keine Grafikdateien durch PHP geparst werden(standardmässig werden sie das zwar nicht, aber das könnte ja u.U. geändert worden sein).

Stelle sicher, dass es nicht auf irgendwelchem Weg möglich ist, eine der Dateien durch Manipulationen in irgendein PHP-Skript zu includen...Grafikdateien können Kommentare enthalten, in denen man auch PHP-Code unterbringen kann, welcher ausgeführt würde, wenn man die Grafik in ein PHP-Skript includet.


Was JS selbst betrifft: mit JS kannst du da eigentlich garnichts tun :suspekt:
 
Hallo Sven!
Zitat:
Beim kopieren ins Zielverzeichnis solltest du sicherstellen, dass nicht die Original-Dateiendung ungeprüft beibehalten wird, benenne die Datei ggf. anhand ihres wirklichen Grafik-Typs um.
Zitatende
Wie soll ich anhand der Datei unterscheiden, ob es sich eigentlich um z.B.
.pgn, .gif . jpg . jepg - Datei handelt, wenn ich mich nicht auf das Dateipostfix verlassen kann? Die Größe der Datei läßt ja nur bspw. .bmp-Dateien identifizieren?
Gruß,
Ulrich
 
Hallo Sven!
Zitat:
Beim kopieren ins Zielverzeichnis solltest du sicherstellen, dass nicht die Original-Dateiendung ungeprüft beibehalten wird, benenne die Datei ggf. anhand ihres wirklichen Grafik-Typs um.
Zitatende
Wie soll ich anhand der Datei unterscheiden, ob es sich eigentlich um z.B.
.pgn, .gif . jpg . jepg - Datei handelt, wenn ich mich nicht auf das Dateipostfix verlassen kann? Die Größe der Datei läßt ja nur bspw. .bmp-Dateien identifizieren?
Gruß,
Ulrich

[phpf]getimagesize[/phpf] kann dir dabei helfen, da es auch den Typ anhand des Dateiheaders erkennt.
 
Danke für den Tipp!
Wie läßt sich denn solch eine Abfrage, bzw. das Ändern des Postfixes in php ändern, ohne das die Gefahr besteht, dass der Kontext des vermeintlichen Bildes im Falle schädlicher Inhalte (Skript, php) meine Skripte "angreift"?
 
Zurück