Запрет выхода из директории скрипта.(аля shell)

triton4ik

Новичок
Запрет выхода из директории скрипта.(аля shell)

Здраствуйте.
Хотел бы поинтересоваться, как лучше сделать что бы скрипт мог продвигаться вглубь директории, но не мог выходить из своей папки вверх.
Есть функция, которой я передаю относительный путь.
С помощью realpath конвертирую из относительного в полный S:\home\localhost\www
И есть эталон S:\home\localhost\www
Вот как лучше проверить, что в конвертируем пути всегда присутствует эталон.
Пробывал регуляркой, что то не коректно получается.
$folder=urldecode($folder);
$folder=strtolower(realpath($folder));
$PHP_SELF=$_SERVER["PHP_SELF"];
$PATH_TRANSLATED=$_SERVER["PATH_TRANSLATED"];
$scriptfolder=str_replace($PHP_SELF, "",$PATH_TRANSLATED );
if (preg_match($scriptfolder, $folder)) {
echo "Вхождение найдено.";
} else {
echo "Вхождение не найдено.";
}
echo $scriptfolder.$folder; \\Напечатает в обоих случая S:\home\localhost\www
Подскажите пожалуйста, может я не правильно что то делаю?
Спасибо.:)
 
1) realpath + substr/strncmp
2) возможно (не знаю какая у тебя задача) будет лучше установить open_basedir
 
Да приплизительно то, но мне надо сравнить 2 пути, к примеру
если путь S:\home\localhost\www\папка\
содержит S:\home\localhost\www то продолжить выполнение скрипта, а если не содержит, то остановить функцию.
Вопрос собственно в том, как лучше это проверять. Спасибо.
 
и чо, в мануале мало функций для работы со строками?
 
Нет не мало. Использую к примеру preg_match, пробывал eregi.
Не понятно почему тождественные строки он не находит.
 
это не строковые. это регулярные выражения.
а здесь тебе нужны именно строковые.
отрезать от строки начало и сравнить с эталоном.
 
Длинна строки эталона, - не известна, видимо поэтому для того что бы сравнить эти строки, надо будет узнать длинну строки с помощью strlen. Или есть другое решение? Спасибо.
 
Фaнат, помнишь как в фильме "Огласите весь список"! ;-)
На самом деле хочеться всего навсего найти оптимальный вариант и самое главное надежный. ;-)
 
triton4ik. а зачем длина? Впрочем легко получается функцией...
А для поиска строки в подстроке так же есть функция.

Причём эталон должен находится в проверяемом пути в нулевой позиции.
 
Нужен поиск подстроки в строке. Обе строки не известны и вычисляются. От регулярок отговорили.
По поводу длинны строки - предложили же:
отрезать от строки начало и сравнить с эталоном.
 
triton4ik
найди ХОТЬ КАКОЙ-НИБУДЬ сначала!

jonjonson
Это для него слишком сложно.
 
Фaнат
Да нет не сложно. Попробую и так и так 8-)
Всем спасибо ;-)
Вот решил сделать вот так, работает!
$find = strpos($folder, $scriptfolder);
if ($find === false) {
$folder=$scriptfolder;
} else {
echo "Строка '$scriptfolder' найдена в строке '$folder'";
}
 
нафиг прег_матч :)
берешь strpos или stripos("S:/home/localhost/www/папка/в/хосте","S:/home/localhost/www/") если результат !== false и === 0, то значит, путь разрешён.

-~{}~ 26.12.07 10:48:

не успел, triton4ik уже начертал функцию
 
romy4
Все равно спасибо за помощь. ;-)

-~{}~ 26.12.07 18:42:

Думаю, тему можно закрывать!
 
Сверху