ФорумПрограммированиеPHP для идиотов → Avoid Path Traversal

Avoid Path Traversal

  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 23 апреля 2010 г. 0:07, спустя 28 дней 16 часов 46 минут

    Сколько раз твердили "не подставляйте пользователькие данные в путь к файлу". Но реально иногда надо.

    Достаточно ли (???) я защищен, если поступаю так: параметр "name" я получил из адресной строки.
    name - это кусок имени, директории туда не должны попадать.
    Дальше я должен получить какой-то файл, соответствующий этому имени.

    private function _avoidPathTraversal($name)
    {
    if (strpbrk($name, "/\\%\0") !== FALSE)
    throw new Exception('Path traversal attempt');
    }

    public function getSomethingByName($name)
    {
    _avoidPathTraversal($name);

    $filePath = APP_DIR . $name . '.txt';
    // … real work
    }

    IMHO, этого достаточно, но лучше спрошу знающих людей — можно ли обойти такую проверку?

    См. по теме: http://www.owasp.org/index.php/File_System#Path_traversal
    ιιlllιlllι унц-унц
  • NRG

    Сообщения: 4761 Репутация: N Группа: в ухо

    Spritz 25 марта 2010 г. 3:48, спустя 3 часа 40 минут 42 секунды


    IMHO, этого достаточно
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 25 марта 2010 г. 4:18, спустя 30 минут 25 секунд

    Спасибо NRG. Я думал уже никто не ответит. Даже не флемили ;)
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 25 марта 2010 г. 6:57, спустя 2 часа 39 минут 9 секунд

    я бы не защищался, а "пропускал" и пропускал бы по регулярке, например ^[a-z0-9]+$, ктото по другому файлы именует? :)

    Сапожник без сапог
  • kostyl

    Сообщения: 5203 Репутация: N Группа: Джедаи

    Spritz 25 марта 2010 г. 7:11, спустя 13 минут 44 секунды

    phpdude,
    я бы тоже
  • artoodetoo

    Сообщения: 5139 Репутация: N Группа: в ухо

    Spritz 25 марта 2010 г. 7:19, спустя 8 минут 6 секунд

    я здесь пишу про последний шанс — эта проверка стоит у меня в "модели", работающей с файлами.

    конечно параметры обрабатываются уже на входе — мой новоиспеченный валидатор теоретически не пропустит плохое значение, но перед тем как читать или писать файл, считаю нелишним защититься наверняка. это как mysql_real_escape_string перед query
    ιιlllιlllι унц-унц
  • phpdude

    Сообщения: 26624 Репутация: N Группа: в ухо

    Spritz 25 марта 2010 г. 7:20, спустя 1 минуту 5 секунд

    можно обойтись без микропроцессора: нажал рычажек - единичка, нажал другой - двоечка
    ыы ля
    Сапожник без сапог

Пожалуйста, авторизуйтесь, чтобы написать комментарий!