Является ли PHP exec безопасным?

Я пытаюсь заставить exec работать на сервере Windows и получать сообщение об ошибке «неспособное fork». После небольшого перебора проблемы, кажется, рекомендуется исправить это, чтобы предоставить учетную запись IUSR READ и EXECUTE для c: \ Windows \ System32 \ cmd.exe.

Но это было серьезное отверстие безопасности? Это безопасно? Есть ли другой способ выполнить [из php] exe, проживающего на сервере?

Он должен выполнить cmd.exe, потому что, когда Windows PHP видит это:

exec("foo -bar -baz"); 

Он называет это:

 cmd /c foo -bar -baz 

Это только дыра в безопасности, если вы позволяете вашему пользователю вводить параметры. IE, вы не должны этого делать:

 // DO NOT DO THIS! exec("foo -bar=" . $_GET['bar']); 

Вместо этого вы должны дезинфицировать свои параметры с помощью escapeshellarg .

 // This is okay. (Be sure foo.exe can handle unexpected input!) exec("foo -bar=" . escapeshellarg($_GET['bar'])); 

Следует иметь в виду, что создание процесса под Windows требует дополнительных накладных расходов, чем в операционных системах Unix-класса. Если у вас большое количество пользователей, многократный вызов exec() может привести к сбою в работе сервера. Если вы ожидаете большой нагрузки на свой сервер, вы можете захотеть, чтобы рабочий процесс постоянно работал как служба Windows