Книга: Разработка приложений в среде Linux. Второе издание

22.3.4. Запуск командной оболочки

22.3.4. Запуск командной оболочки

Запуск системной командной оболочки из любой программы, в которой важен вопрос безопасности, является плохой идеей. При этом защита от тех проблем, которые мы уже обсуждали, становится еще более трудной.

Каждую строку, передаваемую в оболочку, необходимо очень тщательно проверять на достоверность. К примеру, символ 'n' или ;, вставленный в строку, может привести к тому, что оболочка примет две команды вместо одной. Если строка содержит символы ` или последовательность $(), оболочка запускает другую программу для построения аргумента командной строки. Может также иметь место обычное расширение оболочки, при этом переменные окружения и универсализация файловых имен становятся доступными для взломщиков. Переменная IFS позволяет указать символы (отличные от пробела и табуляции) для разделения полей при анализе командных строк при помощи символов, тем самым, открывая новые бреши для атак. Другие специальные символы, такие как <, > и |, предоставляют еще больший простор для построения командных строк, которые ведут себя не так, как подразумевает программа.

Очень трудно выполнить полную проверку всех этих возможностей. Наилучшим способом предотвращения всех возможных атак против командной оболочки служит в первую очередь уклонение от ее запуска. Функции вроде pipe(), fork(), exec() и glob() позволяют достаточно легко выполнять большинство тех задач, для которых обычно используется оболочка. При этом проблемы расширения командной строки оболочки не возникают.

Оглавление книги


Генерация: 3.613. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз