Tom: Dateiformats-Kontrolle

Beitrag lesen

Hello,

In einem Uploadformular möchte ich sichergehen, dass nur jpg-Dateien hochgeladen werden können.
Zur Überprüfung verwendete ich folgenden Code:

$imagesize = getimagesize($_FILES['theimage']['tmp_name']);
If ($imagesize[2] == 2 && $_FILES['theimage']['type'] == "image/jpeg") {
*weiter im script*
}
else {
$fehlermeldung1 = TRUE;
}

Bei mir selbst funktioniert es einwandfrei, korrekte Bilder werden hochgeladen, falsche Dateien abgelehnt.

Bei den meisten Usern die dieses Formular verwenden klappt ebenfalls alles.
Jetzt haben mich aber schon zwei User darauf angesprochen, dass der Upload nicht funktioniert und die oben mögliche Fehlermeldung ausgegeben wird.

Wenn diese User mir nun die Datei auf andere Weise zuschicken und ich sie selbst hochlade, gibt es bei mir keine Schwierigkeiten, sie scheint also korrekt zu sein.

Hat jemand eine Idee wie es passieren kann, dass es bei manchen Usern besagte Probleme gibt? Gibt es eine Möglichkeit, dass diese Prüfung auch bei echten jpg-Bildern falschen Alarm schlägt?

Kleines Denkspiel zum Auftakt:

Wäre es trotzdem noch möglich, JPG-Dateien mit der Endung *.php hochzuladen?
Die Funktion getimagesize() interessiert sich gar nicht für den Namen und die Endung der Datei.

siehe http://wiki.selfhtml.org/wiki/Artikel:PHP/File_Upload
Der Artikel ist zwar lange noch nicht fertig, aber es sollte schon daraus hervorgehen, dass Fileuploads die schlimmsten Sicherheitslücken hervorrufen können.

Lässt sich das nachvollziehen mit den beiden Usern?
Dann baue für sie ein Testscript, dass ihnen neben der Fehlermeldung auch den Rückgabewert der Funktion getimagesize() und den Inhalt von $_FILES['theimage']['type'] anzeigt und bitte sie, Dir diese Ergebnisse per Copy & Paste per eMail zuzusenden.

Vergiss bei der Anzeige in der Webseite nicht, htmlspecialchars() anzuwenden
siehe http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel

Ich vermute, dass es mit der Groß-/Kleinschreibung zu tun hat, oder dass der Client versehentlich den Typ "image/jpg" meldet. Der Clientangabe solltest Du sowieso nicht vertrauen. Die ist beliebig fälschbar.

Liebe Grüße aus dem schönen Oberharz

Tom vom Berg

--
 ☻_
/▌
/ \ Nur selber lernen macht schlau
http://bergpost.annerschbarrich.de