[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Редактирование файлов
XCross
Имя файла передается как один из GET-параметров. Только имя файла(без пути).
Имя папки это имя пользователя.
т.е.
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);
Я бы на твоём месте удалял бы спец.символы, точки, слеши. И расширение не указывал бы. Оно само в зависимости от функционала выводилось бы в нужном месте на уровне ПХП.

Спустя 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, можно, но строчек много biggrin.gif
Ну насчет "совсем ничего экранировать не нужно", ты, конечно, соврал wink.gif

Спустя 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
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.