Если пользователь запрашивает файл в службе, я обычно могу защитить его от доступа к документам, выходящим за рамки того, что мне нужно, используя PHP realpath() и убедитесь, что он находится в корневом каталоге. Например, вот так:
$path = realpath($_GET['path']);
// Protect against LFI vulnerabilities
if (substr($path, 0, strlen($root)) == $root)
{
// safe
}
Однако realpath() работает только с файлами, которые уже существуют. Что, если я хочу убедиться, что место, куда пользователь собирается записать мой скрипт, находится в корневом каталоге?
Я не могу использовать realpath(), должен ли я просто проверить и удалить ссылки «..»? Или есть лучший способ?
basename
указать путь и проверить, находится ли он в корне. Я предполагаю, что ваши пользователи будут писать в существующий каталог загрузки или что-то в этом роде — если нет, то это, очевидно, не сработает. - person Waleed Khan   schedule 25.07.2012basename
, но не знаю, как это было бы полезно. Вы можете привести пример кода? - person Chris Foster   schedule 25.07.2012if (substr(dirname($path, 0, strlen($root)) == $root)
. - person Waleed Khan   schedule 25.07.2012