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.
Tatsächlich. Jemand möge Dir ein Plus geben.
Wäre diesem Angriffsvector denn dann durch
$forbidden=array('//', '../', '/..', '/.ht');
zu begegnen?