Hochgeladene Bilder auf Hijacking überprüfen?

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

  • Hochgeladene Bilder auf Hijacking überprüfen?

    Hallöchen!

    Ich hab "nur" ne ganz kurze technische Frage. Ich weiß zwar nicht ganz genau wie das funktioniert, und habe zu dem Thema auch nicht wirklich seriöse Infos gefunden, aber Grafik-Dateien (z.B. JPEGs), können ja meines Wissens "bösen Code" (JavaScripte etc..) enthalten.

    Da ich wie gesagt nicht weiß wie das genau von statten geht, bin ich mir nicht ganz sicher, ob mein Ansatz soetwas zu unterbinden korrekt ist, oder ob totaler Unsinn, oder was auch immer.

    Ich hatte mir vorgestellt, die Grafiken entsprechend mit imagecreatefromxyz() einzulesen und mit imagecreatexyz() wieder abzulegen. Meines Erachtens schreibt die GD-Lib die, ich sag mal, "Grafik-Informationen" dann neu, und wenn bei der ganzen Prozedur ein Fehler auftritt, ist das Bild wohl nicht in Ordnung.

    Frage jedoch: Fange ich damit alle möglichkeiten ab, oder bringt das vielleicht gar nichts? Oder gibt es vielleicht sinnvollere Ansätze?

    Noch kurz zur Erklärung: Es geht um vom Benutzer hochgeladene Bilder, die ja unter umständen auch aus Versehen derartigen Code enthalten können.

    Vielen Dank im Voraus schonmal
    Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

  • #2
    Hmm, wenn man die Gefahr nicht kennt, ist es schwer Gegenmaßnahmen zu treffen.

    Kommentar


    • #3
      Im Klartext: Du willst überprüfen, ob die hochgeladene Datei ein Bild ist. Dann nimm getimagesize und gut ist.

      Kommentar


      • #4
        Original geschrieben von PHP-Desaster
        Im Klartext: Du willst überprüfen, ob die hochgeladene Datei ein Bild ist. Dann nimm getimagesize und gut ist.
        So kann mans kurz sagen, ja

        Gut, erstmal danke für die Antwort. Jedoch: Könnte sich nicht "böser code" (von dem ich wie gesagt nicht weiß wie der funktioniert, vielleicht weißt du mehr?), nicht im Header oderso verstecken, so dass der von getimagesize ggfs. gar nicht bemerkt wird?

        Ich will da einfach auf der sicheren Seite sein darum frag ich nochma - ich hoffe ihr sehts mir nach

        Grüßli
        Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

        Kommentar


        • #5
          Also ziehen wir mal Kurz ne Zwischenbilanz:

          Du hast eigentlich gar kein PHP-Problem, sondern müsstest erstmal wissen, wovor du angst hast.

          Dir hat jemand erzählt, dass JS-Code sich in Bilddateien verstecken kann. Das ist ja erstmal nichts schlimmes. Jetzt nimmst du aber an, dass dieser Code, wenn du das entsprechende Bild in deine Webseite einbindest, auch vom Browser interpretiert und ausgeführt wird.

          Soweit richtig?

          Dann frag doch erstmal danach um überhaupt mal ne Bestätigung für deine Vermutung zu haben.

          Mir fällt es spontan nämlich erstmal schwer zu glauben, dass der Browser irgendwelchen JS-Code in den Bilder ausführen sollte.

          *verschieb* nach OT

          Kommentar


          • #6
            Mehr oder minder, ich meine dies hier:

            http://www.gnucitizen.org/blog/backdooring-images/

            Ist das einzige was ich zu dem Thema gefunden hab, und ich weiß nicht, inwieweit es noch andere Möglichkeiten gibt.
            Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

            Kommentar


            • #7
              Die Frage ist ja viel eher, ob der Browser Code in einem solchen Bild ausführt, obwohl getimagesize das Bild korrekt erkannt und ein vernünftiger Content-Type Header gesetzt ist. Würde ich mal verneinen, da gibt es bestimmt einen Haufen offensichtlicherer XSS- und sonstwas Lücken in deiner Website/Projekt/Whatever.

              Kommentar


              • #8
                Okay, ich bedanke mich ganz herzlich.
                Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

                Kommentar


                • #9
                  Original geschrieben von PHP-Desaster
                  Die Frage ist ja viel eher, ob der Browser Code in einem solchen Bild ausführt, obwohl getimagesize das Bild korrekt erkannt und ein vernünftiger Content-Type Header gesetzt ist. Würde ich mal verneinen, da gibt es bestimmt einen Haufen offensichtlicherer XSS- und sonstwas Lücken in deiner Website/Projekt/Whatever.
                  Ich glaube ich hab mal von nem Fall gelesen, wo der Internet Explorer dies getan hat. Kann es aber leider nicht mehr an einer Quelle belegen, da ich sie nicht emhr weiß und das suchen bei Google nahc "Internet Explorer Bild Javascript" o.ä. viel zu viel andere Ergebnisse ausspuckt. Aber wahrscheinlich hast du recht, dass es noch mehr als genug andere Sicherheitlücken auf 'ner Website zu stopfen gibt.
                  Du kannst jeden Tag wie deinen letzten leben, du musst nur jeden Tag das Gleiche tun.

                  Denk' mal drüber nach!

                  Kommentar


                  • #10
                    Ich meine mich auch zu erinnern, aber werde mir dann gar nicht mehr die mühe machen, danach zu suchen...

                    Letztendlich ist das ganze damit auch eher eine Sicherheitslücke des Browsers.

                    Kommentar


                    • #11
                      Ja da war mal was ...

                      Den IE (6?) konnte man auf eine Bild-URL lenken. Er hat den vom Server angesagten Content-Type ignoriert und selbst versucht, den Dateityp zu ermitteln. Genauer gesagt hat er geprüft, ob es sich um eine Webseite handelt. Das tat er, in dem er nach HTML-Tags gesucht hat. Fand er welche, hat er die Ressource als Webseite gerendert.
                      Viele Bildformate haben in ihren Headern Platz für Kommentare oder sonstigen Text (ähnlich wie die ID3-Header bei MP3). Dort kann man HTML oder Javascript (mit <script>-Tags) reinschreiben. Der IE hats interpretiert.

                      Um Bilder auf diesen Exploit zu überprüfen, muss man eigentlich nur alle Header nach HTML-Tags durchsuchen und ggf. mit htmlspecialchars() behandeln.
                      Zuletzt geändert von onemorenerd; 16.04.2009, 16:44.

                      Kommentar


                      • #12
                        geht sogar noch viel einfacher. erstell eine textdatei mit diesem code:
                        PHP-Code:
                        <script type="text/javascript">alert ("Jau");</script
                        speicher die als bla.jpg ab, lies sie per php aus und der ie führt das script aus, selbst mit einem
                        PHP-Code:
                        header('Content-Type: image/jpeg'); 
                        erscheint die alert-box. da gibt es auch noch möglichkeiten, js-code in css zu verstecken. der verd***te ie frißt fast alles.

                        peter
                        Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                        Meine Seite

                        Kommentar


                        • #13
                          Der IE führt den Code in Bildern aus, wenn der Content-Type-Header nicht den Markierungen im Bild entsprechen, also den ersten Bytes, beim Gif zum Beispiel die ersten 6 Bytes GIF87a bzw. GIF89a. Wenn der Server korrekt konfiguriert ist bzw. die Typenerkennung über ein Php-Skript läuft und korrekte Header gesendet werden, führt der IE das JavaScript nicht aus. Mit getimagesize und image_type_to_mime_type ist man damit aber nicht immer auf der sicheren Seite, da das BMP-Format zum Beispiel vom IE mit dem Content-Type image/x-ms-bmp erwartet, genannte Funktion aber image/bmp liefert. Bei heise gab es einen Artikel dazu.

                          Kommentar


                          • #14
                            Original geschrieben von PHP-Desaster
                            Mit getimagesize und image_type_to_mime_type ist man damit aber nicht immer auf der sicheren Seite, da das BMP-Format zum Beispiel vom IE mit dem Content-Type image/x-ms-bmp erwartet, genannte Funktion aber image/bmp liefert.
                            Schlechtes Beispiel. Wer liefert schon BMP-Dateien aus? Die kann erstens nicht jeder Browser darstellen und zweitens ist das vollkommener Schwachsinn unkomprimierte BMP-Dateien übers Internet zu senden.

                            Kommentar


                            • #15
                              Schlechtes Beispiel. Wer liefert schon BMP-Dateien aus? Die kann erstens nicht jeder Browser darstellen und zweitens ist das vollkommener Schwachsinn unkomprimierte BMP-Dateien übers Internet zu senden.
                              Ob BMPs sinnvoll sind oder nicht, sei dahingestellt. Wer Bilduploads erlaubt, den Dateityp mit getimagesize validiert und die erlaubten Typen nicht auf Standardtypen wie JPEG, PNG und GIF begrenzt, erlaubt durchaus BMPs. Wie das mit den anderen von getimagesize akzeptierten Datentypen und den ermittelten Mimetypes im IE aussieht, kann ich nicht sagen.

                              Kommentar

                              Lädt...
                              X