Wolfgang: Überprüfung einer Datei, ob es eine Grafik ist

Hallo !!!

Welche Möglichkeiten gibt es bei einer Datei zu überprüfen, ob es eine Grafikdatei ist (insbesondere die üblichen im Browser darstellbaren Grafikformate).

Ich habe dazu bis jetzt nichts vernünftiges gefunden (OK, vielleicht hab ich auch die falschen Suchwörter benutzt...).

Was mir dazu einfällt:

1. Dateiendung überprüfen, was aber vermutlich extrem unsicher ist und eine Sicherheitslücke mehr darstellt!
2. MIME-Typ überprüfen, nur wie geht das? Ist das relativ sicher?

Sonst noch Möglichkeiten (evtl. mit getimagesize() o.ä.)?

Danke schonmal für Tipps,

MfG

Wolfgang

    1. Dateiendung überprüfen, was aber vermutlich extrem unsicher ist und eine Sicherheitslücke mehr darstellt!

    Wieso Sicherheitslücke?

    1. MIME-Typ überprüfen, nur wie geht das? Ist das relativ sicher?

    Ich kann dir einen beliebigen Mime-Type senden. Ob der Browser dann das richtige damit macht, steht allerdings auf nem anderen Blatt ;)

    Sonst noch Möglichkeiten (evtl. mit getimagesize() o.ä.)?

    Da diese Funktion den Dateiheader ausliest, weil nur da drin die Bildgrösse zu finden ist, dürfte das recht sicher sein, allerdings nur für die unterstützten Bildformate.

    Allerdings ist es kein Problem, ein ausführbares Programm in einem Bild einzubetten

    1. Wieso Sicherheitslücke?

      »»
      Naja, weil jeder Depp eine HTML-Datei mit evtl. "bösem" Javascript-Code versehen kann und diese dann als *.jpg speichert...

      1. MIME-Typ überprüfen, nur wie geht das? Ist das relativ sicher?

      Ich kann dir einen beliebigen Mime-Type senden. Ob der Browser dann das richtige damit macht, steht allerdings auf nem anderen Blatt ;)

      »»

      Wie konkret kann ich den MIME-Typ aus einer Datei auslesen? Gibts da ne nette Noob-Funktion? ;-)

      Allerdings ist es kein Problem, ein ausführbares Programm in einem Bild einzubetten

      Das steht natürlich auf einem anderen Blatt...

      1. echo $begrüßung;

        Wie konkret kann ich den MIME-Typ aus einer Datei auslesen? Gibts da ne nette Noob-Funktion? ;-)

        Die nette Noob-Funktion für Bild-Dateien nennt sich getimagesize().

        if ($size = @getimagesize($file))
            Bild. Daten in $size
          else
            Kein Bild. ($size ist false)

        (getimagesize() wirft bei Nicht-Bild-Dateien zusätzlich zum Rückgabestatus false noch eine ignorierbare Warnung, deswegen das @)

        Ansonsten gibt es noch die Mimetype Functions und Fileinfo Functions, wobei die Chancen, diese beiden in freier Wildbahn anzutreffen, deutlich geringer als bei getimagesize() sind.

        echo "$verabschiedung $name";

      2. Naja, weil jeder Depp eine HTML-Datei mit evtl. "bösem" Javascript-Code versehen kann und diese dann als *.jpg speichert...

        Und wo ist das Problem? Einfach den Upload per FTP-Funktionen realisieren und den Upload als Binär machen. Danach dürfte so ziemlich jede Textdatei zerstört sein (ungetestet, aber ein häufiger fehler beim Upload ;))

        Ansonsten kann dir so eine Datei auch nicht schaden, wenn Bilder nur per <img>-Tag eingebunden werden. Denn dann ist Javascript in einer "getarnten" Bilddatei auch völlig unnütz/ungefährlich.

        Ich kenn ja deinen Anwendungsfall nicht, aber ich kann mir kein Szenario vorstellen, bei dem eine Textdatei, getarnt als jpeg o.ä. Probleme verursachen könnte.

        1. OK, danke für alle Antworten, vielleicht waren meine Befürchtungen auch etwas übertrieben, werde es jetzt mit getimagesize() probieren!

          MfG

          Wolfgang

        2. echo $begrüßung;

          Naja, weil jeder Depp eine HTML-Datei mit evtl. "bösem" Javascript-Code versehen kann und diese dann als *.jpg speichert...

          Und wo ist das Problem? Einfach den Upload per FTP-Funktionen realisieren und den Upload als Binär machen. Danach dürfte so ziemlich jede Textdatei zerstört sein (ungetestet, aber ein häufiger fehler beim Upload ;))

          Der Unterschied zwischen ASCII- und Binär-Übertragung beim FTP ist, dass bei ASCII die Zeilenumbruchzeichen an das Zielsystem angepasst werden. Überträgt man eine Datei im Binärmodus unterbleibt diese Umwandlung. Textdateien werden bei Binär-Übertragung keineswegs zerstört, man hat nur mit einigen Editoren bei der Weiterverarbeitung geringfügige Probleme, welche sich jedoch ziemlich einfach lösen lassen. Ein Textdatei vorsätzlich im Binärmodus zu übertragen, um sie wie auch immer entschärfen zu wollen, bringt überhaupt nichts.

          echo "$verabschiedung $name";

          1. Ein Textdatei vorsätzlich im Binärmodus zu übertragen, um sie wie auch immer entschärfen zu wollen, bringt überhaupt nichts.

            Aha, dann kann ich also Theoretisch meine Scripte binär hochladen, da Quell- und Zielsystem Linux sind und somit die Zeilenumbrüche nicht gewandelt werden müssen?
            Nicht, das ich das machen will, nur rein zum Verständnis ;)

            1. echo $begrüßung;

              Aha, dann kann ich also Theoretisch meine Scripte binär hochladen, da Quell- und Zielsystem Linux sind und somit die Zeilenumbrüche nicht gewandelt werden müssen?
              Nicht, das ich das machen will, nur rein zum Verständnis ;)

              Du kannst das auch ganz praktisch so tun. Ich praktiziere das sogar von Windows aus in Richtung Unix. Allerdings speichere ich HTML- und PHP-Dateien grundsätzlich mit Unix-Zeilenumbrüchen. Und beim Hochladen werden die zusammen in einem Rutsch mit Binärdateien binär-FTP-versendet.

              echo "$verabschiedung $name";

            2. Hi,

              Aha, dann kann ich also Theoretisch meine Scripte binär hochladen, da Quell- und Zielsystem Linux sind und somit die Zeilenumbrüche nicht gewandelt werden müssen?
              Nicht, das ich das machen will, nur rein zum Verständnis ;)

              Ich lade meine PHP-Skripte & HTML-Seiten *prinzipiell* binär hoch und runter, gerade damit sie nicht "zerstört" werden!

              Ich möchte nämlich, daß das *gewählte* Zeilenendeformat auch *erhalten* bleibt - egal auf welchem Server-OS und mit welchem Client-OS ich gerade werkel (z.B. mit einem Windows-Editor auf einem Unix-Server). Für PHP und HTML ist es ohnehin unerheblich, in welchem Format sie auf dem Server liegen ...

              Und selbst wenn ich systemnähere Skripte schreibe (Shell, Perl), dann mache ich immer im Unixformat - auch wenn ich sie auf Windows tippe ...

              Gruß, Cybaer

              --
              Hinweis an Fragesteller: Fremde haben ihre Freizeit geopfert, um Dir zu helfen. Helfe Du auch im Archiv Suchenden: Beende deinen Thread mit einem "Hat geholfen" oder "Hat nicht geholfen"!