перечисление содержимого папки: как запретить пользователю проходить над авторизованным каталогом? - PullRequest
0 голосов
/ 26 августа 2009

Я работаю над сценарием, чтобы пользователи могли просматривать заданный каталог, который не является каталогом, в котором находится этот файл, а установлен в переменной.

 define('FOLDER', '../_files/');

Теперь html-код позволяет перемещаться по подпапкам внутри этой папки. Я использую переменную "dir" GET, чтобы указать моему сценарию, какой контент подпапки отображать, и ссылку "..", позволяющую перейти вверх, используя ту же самую переменную dir.

Я установил проверку, что если $ _GET ['dir'] равно FOLDER, он не должен отображать эту ссылку "..". Но достаточно легко связываться с этой переменной, сидящей в URL, и где бы я это ни делал, мой скрипт позволяет просматривать над авторизованной папкой. Не совсем безопасная ситуация ...

Так что я думаю, что я должен проверить полный локальный путь авторизованного каталога по отношению к запрошенному каталогу, и если последний не находится внутри авторизованного каталога, не показывать "..".

Но я не знаю, как это сделать. Любые намеки или указатели будут оценены. Спасибо

Ответы [ 2 ]

1 голос
/ 26 августа 2009

Возможно, вы захотите посмотреть на realpath () .

$foo = realpath($foo);
if (substr($foo, 0, 8) != '/my/path') {
    return false;
}

... или что-то в этом роде.

Скопировано из этого ответа , так как я думаю, что этот вопрос лучше.

0 голосов
/ 26 августа 2009

или вы можете использовать регулярное выражение

$requested = realpath($foo);
$allowedpath = '/path/to/allowed';

$regex = '/^'.addslashes($allowedpath).'\/?.*$/';

if (!preg_match($regex, $requested)) {
    return false;
}
...