Teil von  SELFPHP
  +++ SELFPHP CronJob-Service :: Jetzt auch als Professional-Version verfügbar! +++

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: SELFPHP Forum ::

Fragen rund um die Themen PHP? In über 120.000 Beiträgen finden Sie sicher die passende Antwort!  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

:: Qozido ::

Die Bilderverwaltung mit Logbuch für Taucher und Schnorchler.   

 
 
Ü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
?>


 


Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!

Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.


 




:: Premium-Partner ::

Webhosting/Serverlösungen


Premium-Partner LeaseWeb Germany GmbH
Premium-Partner MECO Systemhaus GmbH & Co. KG
Premium-Partner PSW GROUP GmbH & Co. KG
Premium-Partner BPI-Systeme
Premium-Partner Pixel X
Premium-Partner
 

:: SELFPHP Sponsoren ::


DM Solutions
Microsoft Deutschland GmbH
Sedo - Bei uns wird PHP großgeschrieben
hostfactory.ch - OptimaNet Schweiz AG
ZEND - The PHP Company
Kaspersky Labs
HighText iBusiness
SELFPHP Sponsoren
 

Qozido


© 2001-2013 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt