\\..\\..\\ в путях

Тема в разделе "WASM.BEGINNERS", создана пользователем HuXTUS, 29 ноя 2008.

  1. HuXTUS

    HuXTUS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2007
    Сообщения:
    240
    Здравствуйте все!
    пишу FTP-сервер под windows. Каждый подключившийся пользователь получает в распоряжение собственную папку, которую он видит как "/".
    Выше этой папки он вылезти не может(внутри папки он делает что хотит)

    Так вот, проблемка вот в чем - юзер может в качестве имени файла написать так
    или даже
    на данный момент я поступаю просто: перед выполнением команды удаляю из переданной строки все ".." до тех пор, пока их не останется.

    Ну вот, вопрос: нормально так?
     
  2. MrInterpol

    MrInterpol New Member

    Публикаций:
    0
    Регистрация:
    29 ноя 2008
    Сообщения:
    18
    Идея на мой взгляд правильная, однако рекомендую расширить сигнатуру с ".." до "\.." чтобы избежать случая, когда файл у нас будет называться file..txt
    И еще, сканируй строку на предмет запрещенных в имени пути символов, а также не забудь про возможность переполнения буфера слишком длинной строкой пути.
     
  3. s0larian

    s0larian New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2004
    Сообщения:
    489
    Адрес:
    Крыжёпполь
    Эта, находясь в ~/mydir1/ пользователь должен иметь возможность залить/скачать что-то из ../

    Приводи относительный путь в абсолютный и потом проверяй левую часть - она должна быть .../ftp/user_xxx/

    Ну а на unix есть chroot именно для этого: http://en.wikipedia.org/wiki/Chroot
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Нет. Тебе нужно получить полный путь папки и получить полный путь куда хотят обратиться, исключив все псевдоимена . и ..
    Тогда уже сравнить - появляется ли строчка с путем папки в начале полного пути обращения полностью или не появляется. Если нет - значит обращаются не туда, куда нужно..

    Как сделать resolve всех таких имен автоматически - точно не помню, щас посмотрю может вспомню имя WinAPI
     
  5. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    PathCanonicalize
     
  6. HuXTUS

    HuXTUS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2007
    Сообщения:
    240
    MrInterpol,s0larian,Great и Partner
    спасибо!
     
  7. Osen

    Osen Рие

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    283
    Адрес:
    Париж
    Partner
    MS08-067
     
  8. Osen

    Osen Рие

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    283
    Адрес:
    Париж
    HuXTUS
    Единственным правильным будет полное раскрытие пути и сравнение прав, иначе FTP-сервер будет неполноценным.
     
  9. HuXTUS

    HuXTUS New Member

    Публикаций:
    0
    Регистрация:
    8 янв 2007
    Сообщения:
    240
    Osen
    "сравнение прав" это сурово - у меня пользователи могут делать в своей папке всё, что не запрещает файловая система. А в других папках они не могут делать ничего. Вот и все права.

    "полное раскрытие пути" - дык Partner уже написал замечательную функцию, которая мне должна помочь(наверное о ней говорил Great).

    Или ты предлагаешь вручную строку разбирать?
     
  10. Osen

    Osen Рие

    Публикаций:
    0
    Регистрация:
    5 апр 2008
    Сообщения:
    283
    Адрес:
    Париж
    Нет нет, также подвердил предложение предыдущих выступающих.