PHP: файл существует и находится в определенном подкаталоге - PullRequest
2 голосов
/ 11 июня 2010

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

1 Ответ

1 голос
/ 11 июня 2010

Вы должны знать о жестких ссылках и символических ссылках. Если вы собираетесь изменить файл, выполните статистику, чтобы проверить, является ли он обычным файлом и количество его узлов равно 1.

$subdirToCheck = "/home/mysubdir/";
$file = "relativepath/userfile";
$absfile = realpath($file);
if ($absfile !== FALSE && file_exists($absfile) &&
        substr($absfile, 0, strlen($subdirToCheck)) == $subdirToCheck) {
    $ls = lstat($absfile);
    if (is_link($ls) || $ls["nlink"] > 1) {
        //abort
    }
    else {
        //do stuff
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...