Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> функция проверки пути на допустимость 
V
    Опции темы
boostcoder
Дата 23.1.2011, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



всем привет.
есть некоторый протокол, посредством которого, в виде jSON структур, юзер отсылает запрос на получение/аплоад файла. у юзера есть свой каталог.
интересует, каким образом, можно проверить указанное юзером _file_path_ на допустимость? т.е. чтоб указанный юзером в запросе файл, находился только в подкаталогах юзера.

к примеру, каталог юзера находится тут: /mnt/users/user1
нужно определить ситуацию, когда указанный юзером файл, находится не в его подкаталогах.
так же, нужно чтоб проверка пути, производилась согласно возможным в *nix форматом записи: ~, $, ../.., /, и т.д...
очень хочется узнать то, что такая функция уже имеется smile

спасибо.

PM WWW   Вверх
null56
Дата 23.1.2011, 15:47 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 4
Всего: 12



можно попробовать получать права файла или каталога, а потом проверять uid или guid пользователя, если он принадлежит, то добро, иначе низя, в этом случае, пользователь на сервере должен создавать файлы и каталоги от своего имени, чтобы структурам файловой системы (каталоги, папки) назначались верные права
Код

      int stat(const char *path, struct stat *buf);
       int fstat(int fd, struct stat *buf);
       int lstat(const char *path, struct stat *buf);

struct stat {
               dev_t     st_dev;     /* ID of device containing file */
               ino_t     st_ino;     /* inode number */
               mode_t    st_mode;    /* protection */
               nlink_t   st_nlink;   /* number of hard links */
               uid_t     st_uid;     /* user ID of owner */
               gid_t     st_gid;     /* group ID of owner */
               dev_t     st_rdev;    /* device ID (if special file) */
               off_t     st_size;    /* total size, in bytes */
               blksize_t st_blksize; /* blocksize for file system I/O */
               blkcnt_t  st_blocks;  /* number of 512B blocks allocated */
               time_t    st_atime;   /* time of last access */
               time_t    st_mtime;   /* time of last modification */
               time_t    st_ctime;   /* time of last status change */
           };


Это сообщение отредактировал(а) null56 - 23.1.2011, 15:49
PM MAIL   Вверх
boostcoder
Дата 23.1.2011, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(null56 @  23.1.2011,  15:47 Найти цитируемый пост)
проверять uid или guid пользователя

пользователя, в терминах *nix, не существует. владельцем всех файлов является программа с которой общаются посредством протокола.
PM WWW   Вверх
null56
Дата 23.1.2011, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: 4
Всего: 12



Цитата(boostcoder @  23.1.2011,  14:40 Найти цитируемый пост)
нужно определить ситуацию, когда указанный юзером файл, находится не в его подкаталогах.

тогда на основании чего осуществлять проверку? если пользователя нет.. получается у тебя есть какое - то имя и ТОЛЬКО имя, тогда о каких проверках может идти речь, если никс не знает о пользователе и соответсвенно о его каталогах?
PM MAIL   Вверх
boostcoder
Дата 23.1.2011, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



Цитата(null56 @  23.1.2011,  16:19 Найти цитируемый пост)
тогда на основании чего осуществлять проверку?

на основании того, что все пути указываемые пользователем, не должны выходить за его каталог. к примеру: /mnt/users/user1

Цитата(null56 @  23.1.2011,  16:19 Найти цитируемый пост)
никс не знает о пользователе и соответсвенно о его каталогах?

по этому, в топике, я не говорил о правах.

если кратко - то есть имя юзера, и его каталог. нужна проверка имен/путей на принадлежность их к его каталогам.
PM WWW   Вверх
GrayCardinal
Дата 23.1.2011, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



boostcoder
может realpath(3) + strcmp ? 


--------------------
PM MAIL WWW   Вверх
MAKCim
Дата 23.1.2011, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



man 3 glob
man 3 fnmatch

может то, а может и нет ;)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
boostcoder
Дата 24.1.2011, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 16
Всего: 110



GrayCardinalMAKCim, спасибо! то что надо smile 
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0757 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.