Mime Type per PHP bei File-Upload herausfinden
php528
- php
0 ChrisB2 Der Martin0 Tom
Hallo liebe PHPler,
habe bereits den ganzen Tag Google mit Suchanfragen gelöchert, jedoch ohne Erfolg.
Ich habe schon längere PHP-Erfahrung, habe aber bis heute noch keine adäquate Lösung für ein Problem gefunden: Ich möchte gern den Mime-Type beim Upload von Dateien feststellen.
Ich weiß, dass der Browser diesen im $_FILES array mitteilt, das ist mir jedoch zu unsicher. Ebenfalls zu unsicher ist mir die Herangehensweise, dass man den Dateinamen nur auf Extension überprüft und von dieser dann auf den Mime-Type schließt (denn, was passiert, wenn der Benutzer einfach die Dateiendung einer .htm-Datei in .mp3 oder .jpg ändert?)
Zudem habe ich herausgefunden, dass die php-function mime_content_type deprecated ist (die läuft unter meiner PHP-Version sogar schon nicht mehr, gibt immer false zurück). Und Fileinfo möchte ich auch nicht benutzen, da mein Script auf allen PHP-Installationen ablaufen soll und nicht nur auf solchen, wo Fileinfo installiert ist.
Bitte um Hilfe und adäquate Lösungsansätze!
Gruß
Hi,
Und Fileinfo möchte ich auch nicht benutzen, da mein Script auf allen PHP-Installationen ablaufen soll und nicht nur auf solchen, wo Fileinfo installiert ist.
Mindestanforderungen an Software/Scripte sind nicht böse, sondern ersparen unnötigen und irrationalen Aufwand.
MfG ChrisB
Hi,
Ich möchte gern den Mime-Type beim Upload von Dateien feststellen.
das ist prinzipiell nicht möglich, ohne den Dateiinhalt zu interpretieren.
Ich weiß, dass der Browser diesen im $_FILES array mitteilt, das ist mir jedoch zu unsicher.
Richtig. Die Angabe kann richtig sein, aber es gilt: All input is evil.
Und Informationen, die der Client liefert, sind grundsätzlich nicht vertrauenswürdig.
Ebenfalls zu unsicher ist mir die Herangehensweise, dass man den Dateinamen nur auf Extension überprüft und von dieser dann auf den Mime-Type schließt (denn, was passiert, wenn der Benutzer einfach die Dateiendung einer .htm-Datei in .mp3 oder .jpg ändert?)
Du sagst es. Namen sind Schall und Rauch.
Bitte um Hilfe und adäquate Lösungsansätze!
Vermutlich geht es dir nur darum, bestimmte Dateitypen auszuschließen oder umgekehrt nur bestimmte Typen zuzulassen. Definiere oder recherchiere also die Merkmale, an denen diese Dateien eindeutig identifizierbar sind.
Oft genügt es schon, die Namen (Extensions) zu überprüfen, da der Webserver seinerseits den MIME-Typ meist auch nur anhand des Namens bestimmt. Manche Typen kann man leicht erkennen - z.B. beginnt eine PDF-Datei immer mit dem String "%PDF", eine Bilddatei liefert bei der Untersuchung mit getimagesize() plausible Werte.
Präzisiere also deine Anforderungen.
Ciao,
Martin
Hello,
Zudem habe ich herausgefunden, dass die php-function mime_content_type deprecated ist (die läuft unter meiner PHP-Version sogar schon nicht mehr, gibt immer false zurück).
Auf welcher Plattform läuft denn Dein PHP?
Dass die Funktion immer False zurückgibt, kann daran liegen, dass die Datei
magic
oder
macic.mime
oder
mime.types
nicht vorhanden ist oder nicht am richtigen Platz liegt, je nach Einrichtung und Distribution. Diese Datei enthält die Signaturdefinitionen für mime_content_type().
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg