За последние 24 часа нас посетили 57298 программистов и 1805 роботов. Сейчас ищут 972 программиста ...

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

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

  1. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Код (PHP):
    1.   /**
    2.    * Check that path realy is inside that folder, and return path if yes, and FALSE if not.
    3.    * @param String $path Path to check
    4.    * @param String $folderPath Path to folder, where $path have to be in
    5.    * @return Mixed False on fail, or $path on success
    6.    */
    7.  
    8.   function checkPathIsInFolder($path, $folderPath) {
    9.     if (!$path OR !$folderPath) {
    10.       return false;
    11.     }
    12.     $folderRealpath = realpath($folderPath);
    13.     $pathRealath = realpath($path);
    14.     if ($pathRealath === false OR $folderRealpath === false) {
    15.       return false;
    16.     }
    17.     $folderRealpath = rtrim($folderRealpath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR;
    18.     if (substr(rtrim($pathRealath, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR, 0, strlen($folderRealpath)) !== $folderRealpath) {
    19.       return false;
    20.     }
    21.     return $path;
    22.   }
    23. } 
    Добавлено спустя 23 секунды:
    попробовал вот так
     
  3. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    я еще код не проанализировал, но у меня есть другое замечание. ИМХО, $folderPath вполне имеет право быть пустым. Пустая директория означает текущую (открытую, которую можно сменить функцией chdir()) директорию. Так её воспринимают файловые функции и realpath().
     
  4. BlackScorp

    BlackScorp Новичок

    С нами с:
    16 апр 2014
    Сообщения:
    54
    Симпатии:
    0
    Адрес:
    Germany
  5. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    она немного о другом. Хотя getRealPath() вроде в тему.
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а если файла нету? есть две папки =)
     
  7. BlackScorp

    BlackScorp Новичок

    С нами с:
    16 апр 2014
    Сообщения:
    54
    Симпатии:
    0
    Адрес:
    Germany
    просто я думал, што пхп не просто так SplFileInfo добавил, штоб мы не мучялись с папками у функции а получяли обекты

    Добавлено спустя 4 минуты 3 секунды:
    фила нету

    Код (Text):
    1.  
    2. <?php
    3.  
    4. $info = new SplFileInfo("C://tmp");
    5. var_dump($info->getRealPath()); //false;
    6.  
    7. $info = new SplFileInfo("C://xampp//htdocs//test//00//test.txt");
    8. var_dump($info->getRealPath()); //string 'C:\xampp\htdocs\test\00\test.txt' (length=32)
    9.  
    10. $info = new SplFileInfo("C://xampp//htdocs//test//0//test2.txt");
    11. var_dump($info->getRealPath()); //string 'C:\xampp\htdocs\test\0\test2.txt' (length=32)
    Добавлено спустя 10 минут 16 секунд:
    Код (Text):
    1.  
    2. $info = new SplFileInfo("C://xampp//htdocs//test//00//test.txt");
    3. var_dump($info->getRealPath()); //string 'C:\xampp\htdocs\test\00\test.txt' (length=32)
    4.  
    5. $info = new SplFileInfo("C://xampp//htdocs//test//0//..//00//test.txt");
    6. var_dump($info->getRealPath()); //string 'C:\xampp\htdocs\test\00\test.txt' (length=32)
    я думаю тепер я понял в чем проблема
     
  8. [vs]

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

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    можно is_file, но она тоже фейлит
     
  9. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Игорь, последняя версия у меня не пропускает ничего. Путь на винте был создан. Вродь работает. Подкинь неработающую конструкцию.
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не понял. всё подряд фейлит? у меня работает, я доволенчег.
    фишка была в том, чтобы не просто побайтово сверить, как ты говорил, а убедиться что сверяешь правильные пути. иначе /a/ и /aa/b прокатывало, а это беда.
     
  11. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Нет, не пропускает то, что пропускал ранее. А корректные данные аппрувит.

    Да, я понял.
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну короче буду думать, что всё удалось

    PS:
    Сообщения: 17977
    =)
     
  13. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    дата рождения?
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    уже нет :D
    А ты близко
     
  15. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Оперативно сбегал в паспортный стол и поправил данные?
     
  16. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    уже на порядок больше набил
     
  17. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    ой брось, на 5 больше - это не на порядок. Порядок - это *10.
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Сообщения:
    17984
    год рождения:
    15xx

    :D
     
  19. Fell-x27

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

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Да ты неплохо сохранился! Фото явно было сделано не в те смутные дни.