PHP 5.4 & MySQL 5.5

Bild-Upload absichern

Testen Sie unsere 1896 Kurse

10 Tage kostenlos!

Jetzt testen Alle Abonnements anzeigen
Ja, es gibt sie wirklich, diese Menschen, die bösartige PHP-Skripten auf einen Server hochladen. Aber keine Angst! Dieses Video demonstriert zwei Methoden, wie Sie beispielsweise einen Bild-Upload professionell absichern können.

Transkript

Beim Datei-Upload besteht die Gefahr, dass jemand beispielsweise ein bösartiges PHP-Skript hochlädt und es danach aufruft. Das Skript würde dann ausgeführt. Was natürlich eine Katastrophe wäre. Glücklicherweise gibt es Methoden, den Datei-Upload abzusichern. Welche das sind, zeigt ein Beispiel zum Bild-Upload. Ein erster Ansatz zu verhindern, dass jemand ein PHP-Skript statt eines Bildes hochlädt, liegt natürlich in der Prüfung des mime Typs. Dieser steht an sich in Files Datei type, also in diesem assoziativen Array Element, allerdings ist das nur so wie der Browser das sendet. Und das ließe sich manipulieren. Besser ist es da, den mime Typ über eine PHP-Funktion mit Namen getimagesize zu ermitteln. Anders als der Name vermuten lässt, liefert getimagesize nicht nur die Größe des Bildes, sondern auch den mime Typ. Also Sie sehen, es liefert ein Array zurück mit verschiedenen Elementen. Zum einen ist es Breite, bzw. Höhe, aber zum anderen ist es hier auch der mime Typ. Zusätzlich, und das ist praktisch, liefert getimagesize false zurück, wenn es sich nicht um ein Bild handelt. Weitere Schutzvorkehrungen, die wir treffen sollten ist, dass die Datei nur mit der richtigen Endung abgespeichert wird. Sie können nämlich auch über PHP Bilder erstellen und die wären dann auch Bilder. Also wir wollen aber jetzt richtige Bilder und nicht irgendwie versteckte PHP-Skripten, das heißt, wir wollen auch nur die Bild-Endungen erlauben. Dafür werden wir gleich im Beispiel die Endung der ursprünglichen Datei entfernen und dann eine passende Endung anhängen. Außerdem werden wir uns kümmern, dass nur erwünschte Zeichen in Datei-Namen erlaubt sind, und wir werden uns auch drum kümmern, dass nicht bestehende Dateien überschrieben werden. Also wir haben einiges vor. Schauen wir einmal, wie das jetzt geht. Und das ist unser Skript. Also, wir haben hier zum einen erstmal unser Formular mit dem Feld zum hochladen. Dann führen wir hier erst einmal ganz grobe Überprüfungen durch. Nur wenn das Formular abgesendet wurde, wenn es keine Fehler beim Upload gab, und wenn die Größe den vorgegebenen Wert nicht überschreitet, soll die Überarbeitung durchgeführt werden. Im nächsten Schritt hier überprüfen wir mit getimagesize, ob es sich um ein Bild handelt hier. Also getimagesize, und das liefert ja false zurück, wenn es sich nicht um ein Bild handelt. Und wenn es false liefert, dann breche ich mein Skript ab, dafür dient die, und kann hier in runden Klammern als Parameter bei die noch eine letzte Meldung ausgeben lassen. Wenn es sich hingegen um ein Bild handelt, ermittle ich hier den mime Typ. Und außerdem definiere ich ein hier Array mit mime Typs und den zugehörigen Endungen. Wenn jetzt der mime Typ der hochgeladenen Datei nicht in der Liste ist, das überprüfe ich hier, lasse ich wieder das Ganze abbrechen mit einer Fehlermeldung. Ansonsten setze ich die Endung auf das hier, was ich hier angegeben habe. Dann setze ich jetzt meine neuen Datei-Namen zusammen. Als Basis nehme ich den ursprünglichen Datei-Namen. Ich ersetze aber beispielsweise hier jetzt die ursprüngliche Endung durch nichts. Ich ersetze auch irgendwelche Zeichen, die ich nicht haben möchte, durch nichts. Und ich ergänze an den Namen die Endung, die ich da oben definiert habe. Hier habe ich die Endung definiert. Die hänge ich jetzt hier an den neuen Namen an. Gebe als Ziel das Verzeichnis Upload an und eben diesen Datei-Namen, den ich gerade hier ermittelt habe. Jetzt möchte ich mich noch darum kümmern, dass es nicht vielleicht schon ein Bild mit dem angegebenen Namen gibt, was einfach überschrieben würde, und das überprüfe ich hier in einer while-Schleife. Solange es eine Datei mit dem angegebenen Namen schon am Zielort gibt, das macht dieses file_exists, erstelle ich einen neuen Namen, an den ich "kopie" dranhänge. Und das mache ich solange, bis ich einen neuen Namen gefunden habe und es dazu noch kein bestehendes Bild gibt. Nachdem ich das alles durchgeführt habe, kann ich mit move_uploaded_file die Datei jetzt wirklich an den angegebenen Ort kopieren. Dieses @-Zeichen sorgt dafür, dass eventuelle Fehlermeldungen dabei unterdrückt werden. Jetzt sollten wir das Ganze hier austesten. Ich suche hier nochmal nach einem Bild. Und nehme jetzt mal das, was ich eben schon hatte und lade es hoch. Die Meldung ist, dass es geklappt hat. Wir müssen natürlich jetzt nachschauen, ob es auch wirklich im Upload-Ordner ist. Ich habe jetzt hier mal den Windows Explorer aufgemacht. Hier habe ich mein Upload Ordner und die Spannung steigt. Sie sehen ja, es ist da. Und da es schon ein Bild mit demselben Namen gab, oder hier als Name kopie, Unterstrich, der ursprünglich gewählte Name genommen. Bild-Upload, aber richtig. Gerade beim Bild-Upload ist es wichtig, dass Sie bestimmte Sicherheitsfragen berücksichtigen, und eben Vorkehrungen treffen, wie Sie hier gesehen haben. Natürlich ließe sich das auch noch erweitern.

PHP 5.4 & MySQL 5.5

Steigen Sie auch ohne Vorwissen in die Programmierung PHP- & MySQL-basierter Webseiten ein und lernen Sie die Sprachgrundlagen wie Bedingungen, Schleifen, Funktionen usw. kennen.

7 Std. 9 min (86 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Hersteller:
Software:
MySQL MySQL 5.5
PHP PHP 5.4
Exklusiv für Abo-Kunden
Ihr(e) Trainer:
ISBN-Nummer:978-3-8273-6403-6
Erscheinungsdatum:29.05.2012
Laufzeit:7 Std. 9 min (86 Videos)

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!