Hallo Regina,
if ( isset($_GET['file']) && $_GET['file'] ) { $_GET['file'] = './' . $_GET['file']; $forbidden=array('../', '/..', '/.ht'); $_GET['file'] = str_replace($forbidden, '', $_GET['file']);
Danach beginnt der Inhalt von $_GET auf jeden Fall mit './' (dem aktuellen Verzeichnis) und ist um alle Zeichenfolgen bereinigt, mit denen auf ein tieferes Verzeichnis und die im Apache gesperrten '.ht-Dateien' zugegriffen werden kann.
Eben nicht.
<?php
$f = '....///......//etc/passwd';
$f = './' . $f;
$forbidden=array('../', '/..', '/.ht');
$f = str_replace($forbidden, '', $f);
echo $f;
Gibt ./../etc/passwd
. Durch weiteres einfügen von ///......
kann man auch weiter den Baum herauf. Ist mir aber auch erst nach Svens Posting aufgefallen.
LG,
CK