Ist ein Bild wirklich ein Bild? Wie prüfe ich so etwas?

QUEST08

Erfahrenes Mitglied
Ja, hallo erstmal ;-)

Also wie im Titel schon gefragt, würde ich gerne prüfen ob ein hochgeladenes Bild wirklich ein Bild ist. Ich möchte hier nach Möglichkeit einen 100% Check ausführen.

Also was ich schon mal weiß ist, dass ich den MIME-Typ auslesen und prüfen kann.

Da das nicht gerade sicher ist, kann ich auch noch mit getimagesize den "Header" des Bldes prüfen, jedoch auch nur bei 4 Bildtypen. Was ich auch weiß ist, dass es eine Klasse gibt, die mehrere Typen genauer prüfen kann. Wie heißt diese? Das war irgendwas mit GD...?!

Aber, das reicht mir glaube ich immer noch nicht. Wie kann ich 100%ig sicher sein, dass ein Bild auch wirklich ein Bild ist? Da muss es doch eine Möglichkeit geben? Habt ihr da was für mich?

Liebe Grüße,
QUEST08
 
Sobald das Bild hochgeladen ist kannst du es noch umbenennen und dafür sorgen, dass auf jeden Fall eine Endung wie .jpg, .gif, .png etc. vorhanden ist.
Wenn dir das noch nicht reicht, dann kannst du es per GDLib öffnen in ein neues gleichgroßes reinkopieren oder die Größe ändern usw. und dann wieder per GD abspeichern. Letzteres ist aber eher unüblich.
 
Gegenfrage: Warum brauchst du mehr Möglichkeiten als die gängigen Typen gif, jpg, png und evtl. noch bmp? Für diese Typen gibt es ausreichend Checks. Andere Types zu akzeptieren macht im Web ohnehin kaum Sinn.

Ich würde den Upload auf png und jpg, im Ausnahmefall noch für gif erlauben.

Du kannst ja eine Klasse bauen, die für den Upload versucht, ein neues Bild mittels imagecreatefrom* zu erstellen. Also zu den zusätzlichen Checks. Damit sollte sicher gestellt sein, das es keine andere Möglichkeit gibt, als ein Bild hoch zu laden.
 
Man kann in einem Bild PHP-Code verstecken. Von daher ist ein weiterführender Check gar nicht so abwegig.

Das ist richtig. Aber ein Bild wird im Browser angezeigt und nicht im Webserver. Der Webserver liest lediglich den Content-Type und handelt entsprechend seinem Rule-Set. Wenn ein Webserver-Admin der Endung .jpg den Type application/x-httpd-php zuweißt, gehört er gekündigt/geschlagen/what-ever.

Für Cracker ist ist Code in Bildern interessant, welcher auf einem Client (Browser) ausgeführt werden kann. Da gehört PHP definitiv nicht dazu.

EDIT: Ich muss mich entschuldigen. Man kann ein Image zum verstecken von PHP code verwenden, der auf einem beliebigen System ausgeführt werden kann, auf dem man a) Rechte hat, Dateien in Form von PHP-Scripten zu hinterlegen und b) include() mit URLs funktioniert. Dann kan man sowas machen, wie auf dieser Website beschrieben:

http://mdessus.free.fr/?p=17
 
Zuletzt bearbeitet:
Gerade um das Thema "Code im bild verstecken" geht es mir. Ich habe leider das Beispiel das ich gestern gefunden habe nicht mehr zur Hand. Jedoch hat mal jemand in ein normales bild JavaScript code eingebaut und der Browser hat das bild als HTML interpretiert. (I.E. 7 z.B. prüft die ersten 255 Zeichen eines bildes auf HTML Tags etc. und wenn da was vorkommt interpretiert er das bild als HTML.

Genau das möchte ich ausschließen, da die Bilder anschließend in einer Galerie zur Ansicht gestellt werden. Und wenn Javascript schon ausgeführt werden kann, dann ist dies mit PHP sicherlich auch möglich.

Weiß da jemand weiter?
 
PHP kann seinen eigenen Code als Array darstellen per [phpf]token_get_all[/phpf].
Das heißt du könntest den Dateiinhalt vielleicht, mit dieser Funktion auswerten und sofern ein nicht-leeres Array zurückgegeben wird, ist PHP Code enthalten.
Probiere es einmal mit verschiedenen Varianten.
 
Gibt es auch die Möglichkeit zu prüfen, ob HTML Code oder JavaScript in dem bild vorhanden sind? Irgendwie müssen in diesem Bild ja Zeichen sein. Werde es heute Nacht mal austesten.

Anders rum gefragt, ich denke es ist u.u. für mich und auch andere einfacher eine lösung zu finden, wenn man weiß, wie man solchen code in ein bild bekommt?

hat noch jemand einen vorschlag, wie man code aus einem bild auslesen kann?

wobei das mit token_get_all() ja schon sehr gut ist, dann ist zumindest der php code ausgeschlossen und das ist ja das größte problem gewesen. DankeZodiacXP
 
Zurück