php528: Mime Type per PHP bei File-Upload herausfinden

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ß

  1. 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

    --
    “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
  2. 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

    --
    Wissen erwirbt man, indem man immer das Kleingedruckte sorgfältig liest.
    Erfahrung bekommt man, indem man das nicht tut.
  3. 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

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