Habe hier ein aüßerst nützliches How-To gefunden..
Quelle thegeek.de/blog/type/archiv/post/200501.html
Autor: Marc Schieferdecker
Wenn die Benutzer einer Webseite die Möglichkeit haben selbst etwas hochzuladen, z.B. einen Screenshot, eine PDF-Datei, oder sonstige Dateien, sollte unbedingt beachtet werden, dass die Benutzer nicht jeden Dateityp hochladen können.
Schließlich wäre es äußerst doof, wenn ein böser Benutzer auf die Idee kommt, statt "avatar.jpg" die Datei "deleteall.php", oder "emailallfilez.php" hochzuladen. Ich denke es ist klar was gemeint ist, oder? User-Uploads dürfen nur eingeschränkt möglich sein, sonst ist der ganze Server nicht mehr sicher.
Da der Webserver an der Endung einer Datei erkennt, wie die Datei verarbeitet werden soll, hier eine einfach Klasse, welche den Dateityp anhand der Endung ermittelt und untersucht, ob die Datei zu den erlaubten Endungen passt oder nicht.
Alles anzeigen
Und so wird die Klasse benutzt (Beispiel: Nur Grafikdateien erlauben):
Alles anzeigen
Die Funktionsweise der Klasse ist denkbar einfach: Es gibt die Eigenschaften "allowed_type" (array), "filename" (string) und "result" (boolean). Die Methode "check" überprüft die beim Erzeugen des Klassenobjekts übergebenen Werte und gibt das Ergebnis zurück. Außerdem wird die ermittelte Datei-Endung in der Eigenschaft "filetype" gespeichert.
Ein Code-Schnipsel der hoffentlich hilft die eigene Webseite sauber und sicher zu halten. Viel Spaß damit...
Wer es nicht objektorientiert mag, für den hier noch eine Funktion, die den selben Zweck erfüllt:
Alles anzeigen
Quelle thegeek.de/blog/type/archiv/post/200501.html
Autor: Marc Schieferdecker
Wenn die Benutzer einer Webseite die Möglichkeit haben selbst etwas hochzuladen, z.B. einen Screenshot, eine PDF-Datei, oder sonstige Dateien, sollte unbedingt beachtet werden, dass die Benutzer nicht jeden Dateityp hochladen können.
Schließlich wäre es äußerst doof, wenn ein böser Benutzer auf die Idee kommt, statt "avatar.jpg" die Datei "deleteall.php", oder "emailallfilez.php" hochzuladen. Ich denke es ist klar was gemeint ist, oder? User-Uploads dürfen nur eingeschränkt möglich sein, sonst ist der ganze Server nicht mehr sicher.
Da der Webserver an der Endung einer Datei erkennt, wie die Datei verarbeitet werden soll, hier eine einfach Klasse, welche den Dateityp anhand der Endung ermittelt und untersucht, ob die Datei zu den erlaubten Endungen passt oder nicht.
Quellcode
- <?php
- // Klasse zur Prüfung von Dateitypen
- class check_filetype
- {
- var $allowed_types;
- var $result;
- var $filename;
- var $filetype;
- // Konstruktor
- function check_filetype( $filename, $allowed_types )
- {
- // Set defaults
- $this -> allowed_types = $allowed_types;
- $this -> result = FALSE;
- $this -> filename = $filename;
- $this -> filetype = "";
- }
- // Files prüfen, Ergebnis Rückgabe
- function check()
- {
- $filetype_arr = explode( ".", $this -> filename );
- $this -> filetype = strtolower( end( $filetype_arr ) );
- foreach( $this -> allowed_types AS $type )
- {
- if( $type == $this -> filetype )
- {
- $this -> result = TRUE;
- break;
- }
- }
- return $this -> result;
- }
- }
- ?>
Und so wird die Klasse benutzt (Beispiel: Nur Grafikdateien erlauben):
Quellcode
- <?php
- // Objekt erzeugen und Datei prüfen
- $checkfile = new check_filetype( $_FILES[ "userupload" ][ "name" ], array( "jpg","png","gif" ) );
- if( $checkfile -> check() )
- {
- print "Datei ist okay! (Endung: {$checkfile->filetype})";
- }
- else
- {
- print "Datei ist nicht erlaubt! (Endung: {$checkfile->filetype})";
- }
- // Speicher wieder freigeben
- unset( $checkfile );
- ?>
Die Funktionsweise der Klasse ist denkbar einfach: Es gibt die Eigenschaften "allowed_type" (array), "filename" (string) und "result" (boolean). Die Methode "check" überprüft die beim Erzeugen des Klassenobjekts übergebenen Werte und gibt das Ergebnis zurück. Außerdem wird die ermittelte Datei-Endung in der Eigenschaft "filetype" gespeichert.
Ein Code-Schnipsel der hoffentlich hilft die eigene Webseite sauber und sicher zu halten. Viel Spaß damit...
Wer es nicht objektorientiert mag, für den hier noch eine Funktion, die den selben Zweck erfüllt:
Quellcode
- <?php
- // Files prüfen, Ergebnis Rückgabe
- function check( $filename, $allowed_types )
- {
- $result = FALSE;
- $filetype_arr = explode( ".", $filename );
- $filetype = strtolower( $filetype_arr[ (count( $filetype_arr ) - 1) ] );
- foreach( $allowed_types AS $type )
- {
- if( $type == $filetype )
- {
- $result = TRUE;
- break;
- }
- }
- return $result;
- }
- // Beispiel Aufruf
- $ergebnis = check( $_FILES[ "userupload" ][ "name" ], array( "jpg", "gif", "png" ) );
- ?>