Запрет выхода из директории скрипта.(аля 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
Подскажите пожалуйста, может я не правильно что то делаю?
Спасибо.:)
 

fixxxer

К.О.
Партнер клуба
1) realpath + substr/strncmp
2) возможно (не знаю какая у тебя задача) будет лучше установить open_basedir
 

triton4ik

Новичок
Да приплизительно то, но мне надо сравнить 2 пути, к примеру
если путь S:\home\localhost\www\папка\
содержит S:\home\localhost\www то продолжить выполнение скрипта, а если не содержит, то остановить функцию.
Вопрос собственно в том, как лучше это проверять. Спасибо.
 

Фанат

oncle terrible
Команда форума
и чо, в мануале мало функций для работы со строками?
 

triton4ik

Новичок
Нет не мало. Использую к примеру preg_match, пробывал eregi.
Не понятно почему тождественные строки он не находит.
 

Фанат

oncle terrible
Команда форума
это не строковые. это регулярные выражения.
а здесь тебе нужны именно строковые.
отрезать от строки начало и сравнить с эталоном.
 

triton4ik

Новичок
Длинна строки эталона, - не известна, видимо поэтому для того что бы сравнить эти строки, надо будет узнать длинну строки с помощью strlen. Или есть другое решение? Спасибо.
 

triton4ik

Новичок
Фaнат, помнишь как в фильме "Огласите весь список"! ;-)
На самом деле хочеться всего навсего найти оптимальный вариант и самое главное надежный. ;-)
 

jonjonson

Охренеть
triton4ik. а зачем длина? Впрочем легко получается функцией...
А для поиска строки в подстроке так же есть функция.

Причём эталон должен находится в проверяемом пути в нулевой позиции.
 

triton4ik

Новичок
Нужен поиск подстроки в строке. Обе строки не известны и вычисляются. От регулярок отговорили.
По поводу длинны строки - предложили же:
отрезать от строки начало и сравнить с эталоном.
 

Фанат

oncle terrible
Команда форума
triton4ik
найди ХОТЬ КАКОЙ-НИБУДЬ сначала!

jonjonson
Это для него слишком сложно.
 

triton4ik

Новичок
Фaнат
Да нет не сложно. Попробую и так и так :cool:
Всем спасибо ;-)
Вот решил сделать вот так, работает!
$find = strpos($folder, $scriptfolder);
if ($find === false) {
$folder=$scriptfolder;
} else {
echo "Строка '$scriptfolder' найдена в строке '$folder'";
}
 

romy4

invoke [brain]
нафиг прег_матч :)
берешь strpos или stripos("S:/home/localhost/www/папка/в/хосте","S:/home/localhost/www/") если результат !== false и === 0, то значит, путь разрешён.

-~{}~ 26.12.07 10:48:

не успел, triton4ik уже начертал функцию
 

triton4ik

Новичок
romy4
Все равно спасибо за помощь. ;-)

-~{}~ 26.12.07 18:42:

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