Exec() в PHP в Windows без открытия cmd.exe Слабость безопасности?

У меня есть требование, чтобы веб-скрипт выполнял exe-файл, а затем возвращал результаты exe-файла в веб-запрос.

Я могу либо повторить результат exe, либо изменить exe, чтобы сохранить его результаты в файл, а затем прочитать файл, чтобы повторить веб-запрос.

Проблема в том, что при использовании php под IIS все функции типа exec() shell_execute() system() выдают ошибку «Невозможно разветвить», потому что анонимный пользователь IIS IUSER_%COMPUTER_NAME% не имеет доступа к C:\windows\system32\cmd .EXE

Это можно исправить, изменив разрешения этого анонимного пользователя IIS для cmd.exe, но это значительно ослабляет безопасность (я полагаю).

Есть ли способ, которым я могу с помощью PHP-скрипта под IIS вызвать Exe, не открывая cmd.exe для анонимного пользователя IIS?

Помощь приветствуется.

Зачем мне это делать? У меня есть генератор серийных ключей, когда кто-то покупает мой продукт с помощью кредитной карты, мой платежный процессор должен вызывать URL-адрес, передавая имя лицензии в качестве параметра и возвращая серийный номер для этого имени лицензии.

Мой генератор лицензионных ключей - WinLicense, у меня есть exe.

Мне нужно запустить что-то вроде

shell_exec("C:\inetpub\wwwroot\test.com\testLicense.exe \"".$regName."\""); // или exec() или system()

(testLicense.exe сохраняет результат в файле, который мой php-скрипт может затем повторить)


person SamH    schedule 26.04.2009    source источник
comment
Зачем вам нужно открывать CMD.EXE? Я знаю, что это ваш вопрос, но я хотел бы понять, зачем вам это нужно?   -  person toto    schedule 26.04.2009


Ответы (1)


Очень тщательно фильтруйте переменные, которые вы передаете exec().

используйте целые числа только для числовой информации

если это имя файла, используйте file_exists(), чтобы подтвердить, что это реальное имя файла

если это строка, используйте регулярное выражение и удалите такие символы, как ' и " и \ и ; поэтому любые команды в ней не будут выполняться.

person Fire Crow    schedule 26.04.2009