Код проверяет, правда ли файл находится в полагающейся ему папке, и нету всяких /../../ и так далее. СМ НИЖЕ можно ли его обойти/обмануть?
realpath вернет false, если директории не существует, но rtrim всегда вернет строку, значит проверка на false не прокатит. Пустая строка пройдет проверку в условии на сравнении длины и будет равна substr($realpath, 0, 0). Таким образом, функция подтвердит правильность любого пути, если директории $folderPath не существует.
о, спс Добавлено спустя 4 минуты 30 секунд: а так: СМ НИЖЕ А realpath на пустую строку возвращает путь к папке начального скрипта...
Код (PHP): $path = "C:\\temp\\00\\fake.txt"; $fold = "C:\\temp\\0\\"; $res = checkPathIsInFolder($path, $fold); var_dump($res); // string(19) "C:\temp\00\fake.txt" а каталоги то разные))
прокатывает? Добавлено спустя 2 минуты 1 секунду: у меня такой уже не прокатывает, realpath отличается.
у меня да. \0 воспринимается как конец строки. и realpath дальше не анализирует. в итоге на выход функции все это доходит
как с этим-то быть? =( пычаль ща подумаю Добавлено спустя 1 минуту 32 секунды: ну с этим, как я понимаю, сухосин поможет.
нет, не нужно проверять, существует ли файл вообще. нужно проверить что этот файл находится именно в той папке, которая указана.
Присоединюсь. Нахрена такие костыли, если можно просто проверить существование такого-то файла, путь до которого дописываем от такого-то каталога?
чего? Добавлено спустя 52 секунды: робяты, у меня есть путь А и путь Бэ. Мне надо проверить, что путь А находится внутрях Бэ, но при этом это оба абсолютные путя, т.е. от корня. вы чего?
Сравнивай пути посимвольно. Там хрен что проскочит. Чем топорнее решение, тем меньше шансов его обойти, ибо гибкость нулевая.
проблема называется Path Traversal и хорошо освещена в интернетах. нах изобретательство! http://stackoverflow.com/a/4205278/272885
Что проскакивает? В топорном цикле топорно проверь посимвольно обе строки. Количество итераций бери по меньшеq длине. Первое же несовпадение обрывает цикл. К строке же можно стучаться посимвольно через [].
проскакивает Добавлено спустя 6 минут 27 секунд: ты тему-то почитай =) Добавлено спустя 5 минут 19 секунд: блин, пипец. ссылок мульён, а решения нет.