За последние 24 часа нас посетили 57262 программиста и 1773 робота. Сейчас ищут 1013 программистов ...

Взлом: Проверка пути к файлу на пренадлежность папке

Тема в разделе "Прочие вопросы по PHP", создана пользователем igordata, 17 апр 2014.

  1. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Код проверяет, правда ли файл находится в полагающейся ему папке, и нету всяких /../../ и так далее.
    СМ НИЖЕ
    можно ли его обойти/обмануть?
     
  2. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    realpath вернет false, если директории не существует, но rtrim всегда вернет строку, значит проверка на false не прокатит. Пустая строка пройдет проверку в условии на сравнении длины и будет равна substr($realpath, 0, 0). Таким образом, функция подтвердит правильность любого пути, если директории $folderPath не существует.
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    о, спс

    Добавлено спустя 4 минуты 30 секунд:
    а так:
    СМ НИЖЕ
    А realpath на пустую строку возвращает путь к папке начального скрипта...
     
  4. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    Код (PHP):
    1. $path = "C:\\temp\\00\\fake.txt";
    2. $fold = "C:\\temp\\0\\";
    3. $res = checkPathIsInFolder($path, $fold); 
    4. var_dump($res); // string(19) "C:\temp\00\fake.txt"    
    а каталоги то разные))
     
  5. BlackScorp

    BlackScorp Новичок

    С нами с:
    16 апр 2014
    Сообщения:
    54
    Симпатии:
    0
    Адрес:
    Germany
  6. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    и как это тут применить?

    Добавлено спустя 4 минуты 11 секунд:
    у меня не проходит.
     
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    создай путь $path. т.е. он тоже должен существовать.
     
  8. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    блин, забыл.
     
  9. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    а так
    Код (PHP):
    1. $path = "C:\\temp\\0\0\\..\\..\\etc\\passwd";
    и создавать ненадо)
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    прокатывает?

    Добавлено спустя 2 минуты 1 секунду:
    у меня такой уже не прокатывает, realpath отличается.
     
  11. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    у меня да. \0 воспринимается как конец строки. и realpath дальше не анализирует.
    в итоге на выход функции все это доходит
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    как с этим-то быть? =( пычаль
    ща подумаю

    Добавлено спустя 1 минуту 32 секунды:
    ну с этим, как я понимаю, сухосин поможет.
     
  13. BlackScorp

    BlackScorp Новичок

    С нами с:
    16 апр 2014
    Сообщения:
    54
    Симпатии:
    0
    Адрес:
    Germany
    Код (Text):
    1.  
    2. $fileExistsInFolder = is_file('C:\\foo\\bar\\baz.txt');
    3. var_dump($fileExistsInFolder);
     
  14. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нет, не нужно проверять, существует ли файл вообще.
    нужно проверить что этот файл находится именно в той папке, которая указана.
     
  15. BlackScorp

    BlackScorp Новичок

    С нами с:
    16 апр 2014
    Сообщения:
    54
    Симпатии:
    0
    Адрес:
    Germany
    так если фаил не в етой папки, тогда и нету фаила
     
  16. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Присоединюсь. Нахрена такие костыли, если можно просто проверить существование такого-то файла, путь до которого дописываем от такого-то каталога?
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    чего?

    Добавлено спустя 52 секунды:
    робяты, у меня есть путь А и путь Бэ.
    Мне надо проверить, что путь А находится внутрях Бэ, но при этом это оба абсолютные путя, т.е. от корня.

    вы чего?
     
  18. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Сравнивай пути посимвольно. Там хрен что проскочит. Чем топорнее решение, тем меньше шансов его обойти, ибо гибкость нулевая.
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Добавлено спустя 34 секунды:
    проскакивает...
     
  20. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Аллилуйя!
     
  22. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А можно подробнее, для чего это может быть нужно?
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а чета решений нет
     
  24. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Что проскакивает? В топорном цикле топорно проверь посимвольно обе строки. Количество итераций бери по меньшеq длине. Первое же несовпадение обрывает цикл. К строке же можно стучаться посимвольно через [].
     
  25. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    проскакивает

    Добавлено спустя 6 минут 27 секунд:
    ты тему-то почитай =)

    Добавлено спустя 5 минут 19 секунд:
    блин, пипец. ссылок мульён, а решения нет.