php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Frage zu File Upload und copy()


 
Luka
13-06-2011, 16:06 
 
Hi,

Ich bin gerade dabei einen kleinen Bilderupload zu bauen. Angemeldete User koennen ueber ein Formular Bilder hochladen und dazu noch ein paar Infos schreiben. Ich wollte das Ganze gerne mit Vorschau haben und habe es deswegen mit AJAX, JSON und jQuery umgesetzt.

Das Ganze funktioniert auch soweit sehr gut, man kann ein Bild hochladen, das Ganze wird re-sized und in einen uploadtmp Ordner geschoben, danach kann man noch die Daten eingeben.

Mein Gedanke war nun, dass die Bilder nach dem Abschicken des Formulars in den User Ordner verschoben und Infos ueber die Bilder in der DB abgespeichert werden.

Beim Hochladen habe ich die Infos ja ueber das $_FILES Array verfuegbar, sprich Filesize, Type usw. Die Datei ist nun aber ja bereits auf dem Server und wird dort nur noch verschoben. Gibt es da die Moeglichkeit nochmal an die Daten zu kommen oder nur wenn ich $_FILES in einer Session abspeichere?

Vielen Dank im Voraus fuer Eure Hilfe.

Gruss Luka

 
TobiaZ
13-06-2011, 17:13 
 
Welche Daten brauchst du?
filesize und getimagesize sind kein Problem. An den Original-Dateinamen dürftest du allerdings nicht mehr rankommen.

Beachte auch, dass man den Daten, die der Browser sendet nicht 100%ig vertrauen kann.

 
Luka
13-06-2011, 17:50 
 
Hi TobiaZ,

Das ist Interessant, muss ich dann mal probieren. Aber Mime-Type werde ich dann eher nicht mehr bekommen oder gibt es da auch eine Moeglichkeit?

Die Validierung erfolgt bereits beim Hochladen, mache das Ganze wie gesagt ueber AJAX, dann Validierung und wenn alles okay wird die Info ueber JSON zurueckgeschickt und das Bild ueber jQuery wieder angezeigt.

 
TobiaZ
13-06-2011, 18:08 
 
Wie gesagt, vertraue nicht auf die Angaben, die dir der Browser (oder ein potentieller Angreifer) liefert.

Aber, hast du dir getimagesize auch angesehen? Das sollte doch für deine Bilder vollkommen ausreichen.

 
Luka
13-06-2011, 18:13 
 
Hi,

Stimmt, gerade ausprobiert. Ich bekomme eigentlich alle Informationen mit getimagesize(). Klasse, Danke !

Deine Aussage "Wie gesagt, vertraue nicht auf die Angaben, die dir der Browser (oder ein potentieller Angreifer) liefert." verunsichert mich nun aber doch.

Hast Du da vielleicht eine Seite im www parat, die ich mir zum Thema nochmal durchlesen sollte? Wer weiss, ob ich wirklich an alles gedacht habe...

 
TobiaZ
13-06-2011, 18:27 
 
Hab gerade nichts zur Hand. Ich versuchs kurz und bündig zu erklären:

Wenn du den Mime-Type aus dem $_FILES-Array verwendest, muss dieser ja irgendwie darein gekommen sein. Diese Aufgabe übernimmt leider der Browser Quelle (http://www.php.net/manual/de/features.file-upload.post-method.php). Somit kann ein Angreifer auch einfach den Request fälschen und einen anderen Mime-Type angeben.

 
Luka
13-06-2011, 22:23 
 
Upps, jetzt habe ich nochmal richtig was dazugelernt. Ich dachte immer das man den Mime Type zur Validierung heranziehen kann und das man dann entweder mit Black- oder Whitelist arbeitet, aber dann sollte man wohl doch eher über die Dateiendung gehen, wenn ich es richtig verstehe.

Okay, muss morgen nochmal das Web durchforsten, was ich da über sichere Formulare finde...

Vielen Dank nochmal !

 
h3ll
13-06-2011, 23:33 
 
Upps, jetzt habe ich nochmal richtig was dazugelernt. Ich dachte immer das man den Mime Type zur Validierung heranziehen kann und das man dann entweder mit Black- oder Whitelist arbeitet, aber dann sollte man wohl doch eher über die Dateiendung gehen, wenn ich es richtig verstehe.

Und eine Dateiendung ist nicht manipulierbar?

 
Luka
14-06-2011, 10:41 
 
Oh je oh je, dann bleiben einem aber nicht mehr so viele Moeglichkeiten der Ueberpruefung.

Jetzt eine vielleicht bloede Frage, sagen wir es ist eine exe Datei und die ist umbenannt in jpg. Kann denn jemand damit noch was anfangen?

Und wie sieht denn dann eine bulletproof Ueberpruefung aus?

 
h3ll
14-06-2011, 10:54 
 
100% sicher ist gar nichts, weil sich zB. auch in einer JPG-Datei ein Virus einschleusen lässt, aber die Datei trotzdem noch ein valides JPG ist. Willst du wirklich zu (fast) 100% sicher gehen, wirst du noch zusätzlich einen Virenscanner brauchen.

Aber um grundsätzlich die Dateitypen zu unterscheiden reicht:

PHP: finfo_file - Manual (http://de.php.net/manual/de/function.finfo-file.php)


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:26 Uhr.