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

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

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

Ответ 1

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

exec("foo -bar -baz");

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

cmd /c foo -bar -baz

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

// 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']));

Ответ 2

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