LINUX.ORG.RU

функция system()


0

0

Здравствуйте, уважаемые программисты. Помогите, пожалуйста, советом. Использую slackware 9 (gcc 3.2.2). Интересует, какие проблемы безопасности у функции system() в этой реализации? В устаревшей документации по безопасному программированию сказано, что эту функцию лучше вообще не использовать. Но сейчас новый gcc 3.2.2 и там может быть все по другому. Функции семейства exec не подходят, потому что они требуют передачу параметров отдельно(каждый параметр - в кавычки), а мне крайне необходимо что-бы системная команда запускалась сразу одной строкой (которая передается в функцию целиком), так как сама команда имеет тучу параметров и нет возможности их разделять для использования с exec. Как безопасно использовать system(), или чем ее заменить с учетом запуска команды цельной строкой? Заранее огромное спасибо всем за любую помощь.

anonymous

может я чего не понял POPEN классная весчь ! (еще раз может быть я недопонимаю ваших задач:)

kryl
()
Ответ на: комментарий от kryl

Спасибо за совет. Задача просто запустить внешнюю команду с кучей параметров командной строки - и все. То есть не нужно организовывать никаких каналов обмена (просто запуск). Корректно ли будет в моем случае запустить popen, потом сразу pclose(я правильно понимаю)? Какой режим (r или w) нужен в моем случае. И какая функция работает быстрее (system или popen)?

anonymous
()

1. popen тебе совершенно ни к чему!

2. system() вполне безопасна, если не гонять ее под рутом и не ставить на программу suid.

3. Если ты задаешь такие вопросы то, очевидно, критические к безопасности вещи тебе лучше не писАть. Для не ОЧЕНЬ критичных приложений вызов system() никаких проблем не породит.

Die-Hard ★★★★★
()
Ответ на: комментарий от Die-Hard

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

anonymous
()

нет никаких проблем у system и IIRC не было. исходный код, как всегда, можно найти в glibc.

Murr ★★
()

небезопастна она в том смысле, что например ты ставишь на свою прогу с функцией system() суидность, а там параметры передаются типа
system("........ %s ........");

где %s передаётся например из командной строки и передаётся туда что-нибудь типа какого-нибудь имени.
ну, ебт, закер возьмёт и передаст в качестве имени например ";rm -rf / ;", естственно всё, что стояло до %s у тебя выполнится с ошибками или без оных, а далее пойдёт rm -rf / и вся система встанет раком.

Вот в этом смысле system() не безопастен.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.