1] Exec () действительно полезна, когда вы:
A) Хотите запустить программу / утилиту на сервере, для которого php не имеет эквивалента команды. Например, ffmpeg - это обычная утилита, запускаемая через вызов exec (для всех видов конвертации медиа).
B) Запуск другого процесса - который вы можете заблокировать или НЕ блокировать - очень мощный. Иногда вы указываете pcnt_fork или что-то подобное, вместе с правильными аргументами CL для неблокирования.
C) Другой пример - когда мне нужно обработать XSLT 2.0 - мне нужно выполнить exec () небольшую Java-службу, которую я использую для обработки преобразований. Очень кстати. PHP не поддерживает преобразования XSLT 2.0.
2] Черт, это позор.
Ну, много способов. Существует семейство уязвимостей, называемое «удаленные файлы включают в себя vulns», которые в основном позволяют злоумышленнику включать произвольный источник и, таким образом, запускать его на вашем сервере.
Взгляните на: http://lwn.net/Articles/203904/
Также, как упоминалось выше, говорите, что вы делаете что-то вроде (намного упрощенно):
exec("someUnixUtility -f $_GET['arg1']");
Хорошо, представьте, что злоумышленник делает, url.come? Arg1 = "blah; rm -rf /", ваш код в основном сводится к:
exec("someUnixUtility -f blah; rm -rf /");
Который в unix, вы разделяете команды w / the; Так что да - это может быть большой ущерб.
То же самое с загрузкой файла, представьте, что вы удалили последние четыре символа (.ext), чтобы найти расширение.
Что ж, что-то вроде этого "exploit.php.gif", тогда вы удаляете расширение, поэтому у вас есть файл exploit.php и вы перемещаете его в папку / users / imgs /. Что ж, теперь злоумышленнику нужно только перейти к файлу users / imgs / exploit.php, и он может запустить любой код, какой захочет. Вы были владельцем в этот момент.