Registrieren  •  Login 
  
 
im Forum


 FAQ   Mitgliederliste   Benutzergruppen   Teamseite   Suchen 

[Anleitung] Sichere Dateiuploads mit PHP

 
Neues Thema eröffnen   Neue Antwort erstellen
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
killerbees19
Administrator & Rennleitung
Administrator & Rennleitung



OC-Nickname: KB19
Südafrika Team South Africa

Anmeldedatum: 09.05.2006
Geschlecht: Männlich
Alter: 29 Jahre
Beiträge: 13937
Wohnort: Wien

BeitragVerfasst am: 29.05.2008, 20:24    Titel: [Anleitung] Sichere Dateiuploads mit PHP

Ein sehr beliebtes PHP Feature ist der einfache Dateiupload. Doch gerade dabei gibt es immer wieder Sicherheitslecks, mit denen ein Angreifer mit Leichtigkeit den gesamten Server übernehmen kann. Ich selbst habe mich mit diesem Thema sehr viel beschäftigt und auch einigen Webmastern anhand demonstrativer Angriffe bereits gezeigt, wie leicht man ihre Dateiuploads ausnutzen kann. Mit ein paar einfachen Tipps kann man die typischen Fehler jedoch einfach umgehen. Als Anhang habe ich ein einfaches Upload Script für PHP angehängt, dass wir uns jetzt einmal genauer ansehen wollen.

PHP-Code:
1
2
3
4
5
<?php

$filename 
preg_replace('/^[.]+/'''basename($_FILES['file']['name']));

?>

In dieser Zeile wird der Originaldateiname der Datei genommen, den die Datei auf dem Computer des Benutzers hat. Mit basename() werden zuerst einmal alle Pfadangaben aus dem Dateinamen entfernt, die später sonst gefährlich werden könnten. Mit der preg_replace() Ersetzungen werden noch Angaben wie "." oder ".." aus dem Dateinamen entfernt. Auch darauf sollte man nicht vergessen, außer man generiert für die neue Datei sowieso einen komplett neuen Dateinamen.

PHP-Code:
1
2
3
4
5
<?php

if($error || !is_uploaded_file($temp_filename))

?>

Diese erste Überprüfung ist sehr wichtig, da hier geprüft wird, ob es sich auch wirklich um eine hochgeladenene Datei handelt und ob beim Upload ein Fehler auftrat. is_uploaded_file() muss man also bei jedem Dateiupload benutzen!

PHP-Code:
1
2
3
4
5
<?php

if(!in_array($type$types))

?>

Hier wird die Dateiendung mit den zuvor definierten verglichen, damit nicht jemand z.B. "*.php" Dateien hochlädt. Man glaubt gar nicht wie viele Seiten ein solches Sicherheitsleck haben...

Das wären einmal die wichtigsten Überprüfungen, eigentlich gar nicht so schwer, oder?
Zum Schluss möchte ich allen noch ein paar wichtige Hinweise mit auf den Weg geben:
  • Es ist prinzipiell immer besser, wenn man nicht mit dem Originaldateinamen arbeitet und einen zufälligen generieren lässt, unter dem man die Datei dann abspeichert.
  • In diesem Beispiel fehlt aus Gründen der Übersichtlichkeit (und weil ich gerade nicht mehr Zeit habe Razz ) noch eine Beschränkung der insgesamten Dateien die sich im Upload-Ordner befinden dürfen. Das müsste man in wirklichen Scripts natürlich noch einbauen, sonst könnte jeder unbegrenzt Dateien hochladen.
  • Man sollte Dateiuploads nicht jedem User zur Verfügung stellen, sondern nur authorisierten Personen und das Script durch einen Passwortschutz schützen.
  • Verwende niemals den Mime-Typ der Datei zur Überprüfung des Dateityps, der in $_FILES['file']['type'] gespeichert ist. Denn diese Information kommt vom Browser und nicht von PHP. Und genau durch diesen Fehler ist es bei vielen Systemen möglich "*.php" Dateien getarnt als Bilder hochzuladen...
  • Zum Auslesen von hochgeladenen Dateien verwende niemals include() oder require(), denn so könnte man trotzdem noch schadhaften Code einschleusen. Verwende dafür immer nur readfile() oder file_get_contents().


Bei Fragen oder weiteren Tipps zu diesem Thema, schreibt einfach einen Beitrag in dieses Forum Wink


MfG Christian
_________________
Nach oben
Benutzer-Profile anzeigen killerbees19 ist derzeit offline Spielerprofile bei SC:Special Bewerben anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht teilnehmen.
Du kannst Dateien in diesem Forum nicht hochladen.
Du kannst Dateien in diesem Forum nicht herunterladen.

 

Alle Zeiten sind GMT + 2 Stunden (Sommerzeit)
Aktuelles Datum und Uhrzeit: 05.04.2020, 12:45
Nach oben
Valid HTML 4.01 Transitional
Valid CSS!
Software based on work from the phpBB-Group  •  Deutsche Übersetzung von phpBB.de

netcup - Internetdienstleistungen
 
 
[ happytec.at | forum.happytec.at | blog.happytec.at | esports.happytec.at | event.happytec.at ]