Ankündigung

Einklappen
Keine Ankündigung bisher.

Endung vom "upgeloadeter" Datei

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Endung vom "upgeloadeter" Datei

    Hallo. Ich arbeite gerade an einem mutli-images-upload-crop-resize Script.
    Ich bin schon soweit, dass alles klappt, wenn die Daten "jpgs" sind.
    Mittels "imagecreatefromjpeg" wird die temp-Datei halt bearbeitet...

    Mein Problem ist, dass ich auch gifs und pngs bearbeiten will. Doch die Endung der temp-Datei ist ".tmp".
    Gibt es eine Methode, indem ich nach den tatsächlichen Dateitypen (z.B "gif") frage?


  • #2
    Schau dir das $_FILES[] array mal genauer an

    Kommentar


    • #3
      Danke. Habs mir angeschaut.
      Muss ich das mit ['type'] lösen?

      Kommentar


      • #4
        Zitat von RustyXXL Beitrag anzeigen
        Schau dir das $_FILES[] array mal genauer an
        Der Content-Type kommt vom CLIENT und wie sämtlicher anderer user-input ist dem nicht zu vertrauen.

        -> PHP: getimagesize - Manual
        -> PHP: mime_content_type - Manual
        -> PHP: finfo_open - Manual
        robo47.net - Blog, Codeschnipsel und mehr
        | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

        Kommentar


        • #5
          Und getimagessize() ist auch nicht zu vertrauen.
          Code:
          <89>PNG^M
          ^Z
          ^@^@^@^MIHDR^@^@^@^E^@^@^@^E^H^B^@^@^@^B^M±²^@^@^@^AsRGB^@®Î^\é^@^@^@   pHYs^@^@^K^S^@^@^K^S^A^@<9a><9c>^X^@^@^@^GtIME^GÚ^C^T^N5^SË»<81><93>^@^@^@^HtEXtComment^@öÌ<96>¿^@^@^@^TIDAT^H×cüÿÿ?^C^R`b@^E¤ò^Aêö^C^G?Ë<99>X^@^@^@^@IEND®B`<82>
          <?php
          phpinfo();
          Das wird auch als gültige PNG-Datei erkannt.
          Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

          Kommentar


          • #6
            Gut, nu hab ich wenigstens auch wieder was gelernt....
            Vergesst also einfach am besten meinen letzten post ^^

            Kommentar


            • #7
              Der Content-Type kommt vom CLIENT und wie sämtlicher anderer user-input ist dem nicht zu vertrauen.
              -> PHP: getimagesize - Manual
              -> PHP: mime_content_type - Manual
              -> PHP: finfo_open - Manual
              "mime_content_type" hat leider nicht mit ".tmp" funktioniert. Die Rückgabe war leer!

              Ich habe das vorerst mal so gelöst:

              PHP-Code:
                      $allowedExt    =    array('jpg','gif','png');
                      if( 
              $_FILES[images][type][$i] == "image/jpeg"){$extension "jpg";}
                      if( 
              $_FILES[images][type][$i] == "image/gif"){$extension "gif";}
                      if( 
              $_FILES[images][type][$i] == "image/png"){$extension "png";}
                      echo 
              "Die Ermittelte Extension ist: "$extension ."<BR>";
                      
                      if(!isset(
              $extension) ||  !getimagesize($_FILES[images][tmp_name][$i]) ||  !in_array($extension,$allowedExt))
                          {
                          echo 
              "======> FALSCHER DATEITYP <BR><BR>";
                          continue;
                          } 

              Kommentar


              • #8
                Zitat von Manko10 Beitrag anzeigen
                Und getimagessize() ist auch nicht zu vertrauen.
                Code:
                <89>PNG^M
                ^Z
                ^@^@^@^MIHDR^@^@^@^E^@^@^@^E^H^B^@^@^@^B^M±²^@^@^@^AsRGB^@®Î^\é^@^@^@   pHYs^@^@^K^S^@^@^K^S^A^@<9a><9c>^X^@^@^@^GtIME^GÚ^C^T^N5^SË»<81><93>^@^@^@^HtEXtComment^@öÌ<96>¿^@^@^@^TIDAT^H×cüÿÿ?^C^R`b@^E¤ò^Aêö^C^G?Ë<99>X^@^@^@^@IEND®B`<82>
                <?php
                phpinfo();
                Das wird auch als gültige PNG-Datei erkannt.
                jeglichen methoden zum auswerten von magic-numbers oder ähnlichem ist nicht zu vertrauen, aber was sind denn alterantiven ?
                mit einem program öffnen und neu speichern ?
                In den meisten fällen nicht anwendbar, aufwendig und wenn php in irgendwelchen kommentaren/exifs oder sonstwas steht auch dann nicht zu verhindern ohne eventuell relevante daten zu zerstören.
                Und in der Form ja auch NUR dann eine gefahre wenn die datei in irgendeiner form ausgeführt wird oder ausführbar ist.

                Zitat von halskrause Beitrag anzeigen
                "mime_content_type" hat leider nicht mit ".tmp" funktioniert. Die Rückgabe war leer!

                Ich habe das vorerst mal so gelöst:

                PHP-Code:
                        $allowedExt    =    array('jpg','gif','png');
                        if( 
                $_FILES[images][type][$i] == "image/jpeg"){$extension "jpg";}
                        if( 
                $_FILES[images][type][$i] == "image/gif"){$extension "gif";}
                        if( 
                $_FILES[images][type][$i] == "image/png"){$extension "png";}
                        echo 
                "Die Ermittelte Extension ist: "$extension ."<BR>";
                        
                        if(!isset(
                $extension) ||  !getimagesize($_FILES[images][tmp_name][$i]) ||  !in_array($extension,$allowedExt))
                            {
                            echo 
                "======> FALSCHER DATEITYP <BR><BR>";
                            continue;
                            } 
                Nutze zumindest getimagesize zuerst, das ist ne nummer sicherer wie deine aktuelle variante, vor allem bekommst du dann keine probleme damit wenn Browser variationen oder andere typen senden. Z.b. der IE hat für progressive jpegs noch einen extra-mime-type, .... etc.
                Ansonsten kannst du auch gleich nach der Datei-Endung.

                Und mit 400 hier posts sollte man doch schon gelernt haben dass array-indizes wenn es keine konstanten sind in anführungszeichen oder hochkomma gehören.
                Du solltest dir langsam mal angewöhnen ordentlich zu arbeiten, mit aktiviertem display-error und nem vernünftigen error_reporting [z.b. E_ALL | E_STRICT] zu arbeiten.

                Falls du etwas Englisch kannst hier ein paar versuche was für auswirkungen all die Notices die dein php-code im hintergrund verursacht für auswirkungen haben kann, weil jedes mal auch wenn du es ausblendest, im hintergrund in php ein error getriggert wird:

                How do NOTICES influence php-scripts performance ?
                robo47.net - Blog, Codeschnipsel und mehr
                | Caching-Klassen und Opcode Caches in php | Robo47 Components - PHP Library extending Zend Framework

                Kommentar


                • #9
                  Die Kombination aus allem macht es. Wenn man einerseits prüft, ob das Bild generell gültig ist und dann auch noch schaut, dass die Endung nicht .php ist, dann hat man schon viel gewonnen. Jetzt bleibt aber natürlich noch das Risiko von Schadcode, der im Bild versteckt ist und z.B. durch ungepatchte Browser oder Grafikbibliotheken auf dem System des Anwenders ausgeführt wird. Dagegen kann man aber wohl nichts tun.
                  Ich wollte aber lediglich darauf hinweisen, dass allein das Prüfen mit getimagesize() nicht reicht. Immerhin wird es oft gemacht, weil die Leute annehmen, dann sei das Bild sicher, was es aber natürlich nicht ist. Viele Upload-Skripte im Netz führen (wenn überhaupt) nur eine Prüfung mit getimagesize() oder gar nur anhand des vom User gesendeten MIME-Types durch.
                  Refining Linux: “Performing Push Backups – Part 1: rdiff-backup

                  Kommentar

                  Lädt...
                  X