Имя папки это имя пользователя.
т.е.
kmaks/file.ext
если в GET-параметре указать ../../Windows/boot.ini, то можно напакостить.
Я решил тупо вырезать все "../" и "..\".
Полный путь до фала привести к виду:
kmaks/Windows/Boot.ini. Не дать возможность попакостить.
$FILE_NAME = $_GET['FILE_NAME'];
$FILE_NAME = preg_replace("#(\.\./|\.\.\\)#", "", $FILE_NAME); //Удаляем "../" и "..\"
Блин, не пашет. Все дело во втором шаблоне. Если его убрать, то удаляется "../", "..\" остается.
Я не понимаю. Ведь экранирован слеш. Почему не получается?
Спустя 11 минут, 11 секунд (29.01.2012 - 14:15) inpost написал(а):
Создай переменную, в которую помести все плохое.
А потом через str_replace($var1,'',$text);
Я бы на твоём месте удалял бы спец.символы, точки, слеши. И расширение не указывал бы. Оно само в зависимости от функционала выводилось бы в нужном месте на уровне ПХП.
А потом через str_replace($var1,'',$text);
Я бы на твоём месте удалял бы спец.символы, точки, слеши. И расширение не указывал бы. Оно само в зависимости от функционала выводилось бы в нужном месте на уровне ПХП.
Спустя 2 минуты, 42 секунды (29.01.2012 - 14:17) duhon написал(а):
попробуй так
"#(\.\./|\.\.\\\)#"
"#(\.\./|\.\.\\\)#"
Спустя 23 минуты, 36 секунд (29.01.2012 - 14:41) XCross написал(а):
Цитата |
#(\.\./|\.\.\\\)# |
Работает. Спасибо. Но я все-равно не понял. Почему в примере "\\\"?
inpost
Пользователь может хранить любый файлы. Ограничивать в выборе имени файла не хочется.
$FILE_PATH = preg_replace("#(\.\./|\.\.\\\|:|\?|\"|\|\<|\>|\*)#", "", $FILE_PATH);
Где-то так. Но почему-то "<" не удаляется.
Спустя 1 минута, 12 секунд (29.01.2012 - 14:42) inpost написал(а):
А чем тебе вариант без регулярок не подошел? Он и проще будет, так как не надо экранизировать ничего.
Спустя 4 минуты, 55 секунд (29.01.2012 - 14:47) XCross написал(а):
inpost, можно, но строчек много
Ну насчет "совсем ничего экранировать не нужно", ты, конечно, соврал
Ну насчет "совсем ничего экранировать не нужно", ты, конечно, соврал
Спустя 10 минут, 25 секунд (29.01.2012 - 14:58) inpost написал(а):
kmaks
А ты сделай так, как я показал, и укажи, где там необходимо экранизировать.
А ты сделай так, как я показал, и укажи, где там необходимо экранизировать.
Спустя 21 секунда (29.01.2012 - 14:58) XCross написал(а):
'..\\'
Всем спасибо. Решено.
Всем спасибо. Решено.
Спустя 6 секунд (29.01.2012 - 14:58) Nikitian написал(а):
basename() не?
Спустя 1 минута, 11 секунд (29.01.2012 - 14:59) inpost написал(а):
kmaks
Ну вот, даже не попробовал.
Ну вот, даже не попробовал.
Спустя 3 минуты, 55 секунд (29.01.2012 - 15:03) XCross написал(а):
Цитата |
Ну вот, даже не попробовал. |
Попробовал, его использую!
_____________
Обмен Ukash на WebMoney