Я получил чужой код для системы, которая показывает папки с фотографиями в вашем браузере.
Например, это возможный URL-адрес на сайте:
gallery.php?action=view&folder=Cars
На данный момент вы можете заменить «Cars» на ../../../../../, что с радостью покажет корневую папку Linux. К счастью, на данный момент сайт не работает.
Я попытался использовать realpath, чтобы исправить это. Вот что у меня есть до сих пор:
case 'view' :
$name = realpath(dirname(__FILE__) . "/Content/Gallery/" . $_GET['folder']);
echo $name;
$data = $file->getPictures($name);
require 'Views/Gallery.view.php';
break;
Я добавил эхо в третью строку, чтобы увидеть, каким будет URL-адрес. В приведенном выше URL-адресе все в порядке, и эхо выводит это:
/var/www/Content/Gallery/Cars
Все идет нормально. Однако, если я ввожу /../../../../../../../../ вместо «Cars», $name становится / и на странице по-прежнему отображается корневая папка. Английский не мой родной язык, поэтому я могу неправильно понять, как работает realpath или что он делает. Насколько я понял, он удаляет любой экземпляр ../ с заданного URL-адреса.
Может кто-нибудь, пожалуйста, скажите мне, что я делаю неправильно?
realpath()
не предназначен для борьбы с атаками обхода каталога; и не претендует на это - person Pekka   schedule 09.01.2014mysql_query($_GET['sql']);
... - person Mike B   schedule 09.01.2014