Является ли 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