Axel: Mime-Type beim Upload mit IE kaputt

Ich habe ein Upload-Script geschrieben, das nach dem Datei-Upload checken soll, ob die Datei eines von mehreren Formaten hat. Das Script funktioniert unter Mozilla anstandslos, nur der IE (Win) macht Ärger, denn das Script erkennt nicht, dass es sich um ein zulässiges Dateiformat handelt.

Ist das vielleicht ein bekannter IE-Bug?

Ich glaube nicht, dass es am Script liegt, aber hier ist der Auszug aus dem Script:

if (is_uploaded_file ($HTTP_POST_FILES['uploaded_image']['tmp_name']))
   $fehler = '';
   if (($HTTP_POST_FILES['uploaded_image']['type'] != 'image/gif') && ($HTTP_POST_FILES['uploaded_image']['type'] != 'image/jpeg') && ($HTTP_POST_FILES['uploaded_image']['type'] != 'image/tiff')) $fehler.= 'Die Datei muss eine GIF-, JPG- oder TIFF-Datei sein.<br>';
   if (!$fehler) { ... ... }
   else echo $fehler;
}

  1. Hi,

    Das Script funktioniert unter Mozilla anstandslos, nur der IE (Win) macht Ärger, denn das Script erkennt nicht, dass es sich um ein zulässiges Dateiformat handelt.

    was der Client Dir liefert, ist grundsätzlich unglaubwürdig. Ich habe kein Problem damit, eine Windows-Executable als image/gif auszugeben. Prüfe nur und ausschließlich, ob *Dein* System die Daten als einen gültigen Typ akzeptiert; niemals jedoch, ob irgend ein Fremdling sowas behauptet.

    Cheatah

    --
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes
    1. Hi,

      Das Script funktioniert unter Mozilla anstandslos, nur der IE (Win) macht Ärger, denn das Script erkennt nicht, dass es sich um ein zulässiges Dateiformat handelt.

      was der Client Dir liefert, ist grundsätzlich unglaubwürdig. Ich habe kein Problem damit, eine Windows-Executable als image/gif auszugeben. Prüfe nur und ausschließlich, ob *Dein* System die Daten als einen gültigen Typ akzeptiert; niemals jedoch, ob irgend ein Fremdling sowas behauptet.

      Ja, genau das habe ich ja eigentlich vor. Ich will mich nicht auf die Dateiendung verlassen, sondern prüfen, ob das Format einem der drei zulässigen entspricht. Wie soll ich diese Prüfung denn vornehmen, wenn die MIME-ABfrage nicht glaubwürdig ist? Für Deine Antwort dankt Dir Axel.

      1. Moin,

        Ja, genau das habe ich ja eigentlich vor. Ich will mich nicht auf die Dateiendung verlassen, sondern prüfen, ob das Format einem der drei zulässigen entspricht.

        Sowohl Dateiname als auch -type kommen vom Client und sind damit per definition unsicher. (Wobei die Dateiendung im Prinzip noch um einiges unzuverlässiger ist, als der Typ.)

        Wie soll ich diese Prüfung denn vornehmen, wenn die MIME-ABfrage nicht glaubwürdig ist?

        http://aktuell.de.selfhtml.org/artikel/phpasp/php-uploadcheck/index.htm

        --
        Henryk Plötz
        Grüße aus Berlin
        ~~~~~~~~ Un-CDs, nein danke! http://www.heise.de/ct/cd-register/ ~~~~~~~~
        ~~ Help Microsoft fight software piracy: Give Linux to a friend today! ~~
        1. Vielen Dank für Eure Antworten. Da neben JPG- und GIF-Dateien auch TIFFs hochgeladen werden sollen, funktioniert es mit getimagesize() leider nicht, obwohl die Funktion in der Theorie auch TIFFs erkennen sollte. (Ich hoffe nicht, dass alle meine TIFFs, die ich probeweise hochladen wollte, beschädigt waren.)

          file war ein guter Tip! Man sollte, wie mir scheint, sich viel häufiger auf die bewährten Tools von UNIX besinnen.

          Wen interessiert's:

          $filetype = exec ("file ".$HTTP_POST_FILES['uploaded_image']['tmp_name']);
          if (!preg_match ("/^/tmp/\w+: (JPEG|TIFF|GIF)/", $filetype)) $fehler.= 'Die Datei muss eine GIF-, JPG- oder TIFF-Datei sein.<br>';

          Nochmals Vielen Dank

          Axel

          1. Hallo Axel,

            $filetype = exec ("file ".$HTTP_POST_FILES['uploaded_image']['tmp_name']);

            Hier würde ich _dringend_ noch ein escapeshellarg() drum machen! http://de3.php.net/manual/de/function.escapeshellarg.php Sonst kommst Du in Teufels Küche.

            Viele Grüße,
            Christian

          2. Hi Axel,

            file war ein guter Tip! Man sollte, wie mir scheint, sich viel häufiger auf die bewährten Tools von UNIX besinnen.

            meine prinzipielle Frage in einem solchen Falle wäre: Bin ich der einzige, der dieses Problem hat, oder hatten viele tausend andere dasselbe Problem auch schon?
            Falls letzteres, dann gibt es mit hoher Wahrscheinlichkeit eine fertige Lösung im Open-Source-Universum.

            Viele Grüße
                  Michael

            --
            T'Pol: I apologize if I acted inappropriately.
            V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
            (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
            Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
      2. Hi Axel,

        Wie soll ich diese Prüfung denn vornehmen, wenn die MIME-ABfrage nicht glaubwürdig ist?

        UNIX? => "man file"

        Viele Grüße
              Michael

        --
        T'Pol: I apologize if I acted inappropriately.
        V'Lar: Not at all. In fact, your bluntness made me reconsider some of my positions. Much as it has now.
        (sh:| fo:} ch:] rl:( br:^ n4:( ie:% mo:) va:| de:/ zu:| fl:( ss:) ls:~ js:|)
        Auch diese Signatur wird an korrekt konfigurierte Browser gzip-komprimiert übertragen.
      3. Hallo Axel,

        Wie soll ich diese Prüfung denn vornehmen, wenn die MIME-ABfrage nicht glaubwürdig ist?

        Mit der PHP-Funktion getimagesize() kannst Du zumindest für Bilder feststellen, was für ein Typ das ist und welche Größe sie haben. Näheres dazu im PHP-Manual.

        Viele Grüße,
        Christian