Teil von  SELFPHP
Letztes Update: 14.09.2007 09:07:01

Navigation

Seite Startseite
Seite Aktuelles
Seite Seite News*
Seite Seite Pressemitteilungen*
Seite SELFPHP
Seite Seite Über SELFPHP
Seite Seite Werbung
Seite Seite Kontakt
Seite Seite Unsere Banner
Seite Seite Impressum
Seite Qozido
Seite Seite Diving Edition
Seite Seite Snorkeling Edition
Seite SELFPHP Dokumentation
Seite Seite PHP-Skripte
Seite Seite PHP Befehlsreferenz
Seite Seite PHP 5 Praxisbuch
Seite Seite PHP Code Snippets
Seite Seite SELFPHP in Buchform
Seite Anbieterverzeichnis
Seite Seite Globale Branchen
Seite Seite Webhosting/Server
Seite Services
Seite Seite Forum*
Seite Seite RSS-Feeds*
Seite Seite Downloads*
Seite Seite Gratis-Video-Lektionen*
Seite Seite SELFPHP auf Heft-CD*
Seite Seite Newsletter*
Seite Internet Security
 sponsored by  
Seite Stellenangebote*
Sedo - Bei uns wird PHP großgeschrieben
Seite Premium-Partner   
Webhosting/Serverlösungen
Seite Produktempfehlung   
Seite Seite SteadyBackup

 
* Link führt ins Internet


Anbieterverzeichnis
Informieren Sie sich über die Unternehmen in unserem Anbieterverzeichnis!  
 


SELFPHP Forum
Fragen rund um die Themen PHP? In über 100.000 Beiträgen finden Sie sicher die passende Antwort!*  


Newsletter
Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!*

Vorname: 
Name:
E-Mail:
 




 

Übermittelte Dateinamen überprüfen


Systemvoraussetzung

  • Linux
  • Windows
  • PHP 3 >= 3.0.9
  • PHP 4
  • PHP 5
  • PCREBibliothek

Datei(en)

file_check.php

Problem

Sie bieten Dateien zum Download an, und die Dateinamen werden dabei per GET oder POST übermittelt. Anschließend rufen Sie diese Datei auf und bieten dann dem Besucher die gerade geholte Datei zum Download an.

Dieses Szenario sieht man sehr oft im Internet. Sie sollten sich aber immer eines vor Augen führen: Variablen, die von außerhalb des eigenen Programmcodes kommen, sind in erster Linie als „Feinde“ anzusehen. Wir sollten diesen Variablen also niemals einfach trauen, sondern sie immer überprüfen.

Somit wäre es unter Umständen möglich, mit folgendem Variableninhalt die Passwortdatei des eigenen Servers auszuliefern. Was das bedeuten kann, werden Sie sich sicherlich vorstellen können. Deshalb trauen Sie keiner Variablen, die von außen kommt!

../../../../etc/passwd

Wir müssen sämtliche Variablen, die von außerhalb kommen und uns Schaden zufügen könnten, überprüfen. Dafür nutzen wir in unserem Beispiel preg_match() (29, 34). Wenn Sie Dateien zum Download anbieten und diese per PHP ausliefern, lassen Sie sich lediglich den reinen Dateinamen übermitteln und setzen den Verzeichnisnamen fest in der PHPDatei ein.

Wir müssen dann nur noch die Variable daraufhin überprüfen, ob sie ein oder mehrere Slashes beinhaltet. Ist das der Fall, brechen wir mit einer Fehlermeldung ab (30, 35), ansonsten können wir die Datei ausliefern (32, 37).

In unserem Beispiel haben wir zwei Arrays zur Anschauung genutzt. Sie sollten die Arrays später durch Ihre POST- oder GET-Variablen ersetzen.

26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
$test[0] = "../../../../etc/passwd"
$test[1] = "wert.txt";

if(
preg_match('=/='$test[0]))
    echo 
'Fehler! ' $test[0] . ' ist nicht erlaubt.<br>';
else
    echo 
'Datei ' $test[0] . ' ist in Ordnung.<br>';

if(
preg_match('=/='$test[1]))
    echo 
'Fehler! ' $test[1] . ' ist nicht erlaubt.<br>';
else
    echo 
'Datei ' $test[1] . ' ist in Ordnung.<br>';
Beispiel 4.4: file_check.php

Ausgabe im Browser

Fehler! ../../../../etc/passwd ist nicht erlaubt. Datei wert.txt ist in Ordnung.

Sie sehen nachfolgend die geänderte Version für die Übermittlung von GET-Variablen. Sie müssen lediglich den Variablennamen anpassen.

1:
2:
3:
4:
5:
6:
7:
<?PHP
$_GET
['filename'];
if(
preg_match('=/='$_GET['filename']))
    echo 
'Fehler! ' $_GET['filename'] . ' ist nicht erlaubt.<br>';
else
    
// Download starten
?>


 




 sponsored by

Sedo - Bei uns wird PHP großgeschrieben


VERIO - An NTT Communications Company


HighText iBusiness


Webspace-Verkauf.de


video2brain




 Premium-Partner
 Webhosting/Serverlösungen

BPI-Systeme


Premium-Partner Pixel X


Premium-Partner First Colo


Premium-Partner dogado Internet




Qozido


© 2001-2008 E-Mail SELFPHP - Damir Enseleit, info@selfphp.deImpressumKontakt