在IIS上运行exec()时,PHP产生CGI错误


0

Windows Server 2003 x64

PHP 5.2

IIS 6.0

程序Ink2Png.exe的设置为“所有人”->“读取和执行”权限。

依赖关系(microsoft.ink.dll)

PHP安全模式已关闭

exec()被传递[完整exe路径],空格,[另一个文件的完整路径]

该另一个文件也具有完全读取权限。

输出目录具有完全写权限。

一旦击中exec(),连接就会终止,浏览器甚至没有收到完整的http标头集,并且报告了CGI错误。检查输出,似乎程序甚至没有运行。

有任何想法吗?我如何弄清楚到底发生了什么并使其重新运行?

编辑:另外,它是一个.NET应用程序,如果以任何方式都有意义的话。

Answers:


0

@Patrick:如果你只给用户Everyone访问,那么你就需要加读/执行权限IUSR_<MachineName>IWAM_<MachineName>以及和IIS_WPG太多,如果你仍然有问题。请记住,还要Write为所有这些用户提供访问输出目录的权限。


IUSR已经存在了,唯一的IWAM_是_plesk(默认)和_TEMPLATE,因此我添加它们和WPG只是为了很好的衡量。没有骰子。
Patrick

0

尝试在IIS日志中存储什么状态代码?

难道是Web服务扩展列表阻止执行?(本来以为这不太可能,只希望执行单个级别的可执行程序阻止,但是可以)


这是日志行:2011-05-30 17:14:44 W3SVC11083 CT3462 66.197.54.226 GET / mobile / beta / Patients / view.php id = 4 80-142.166.62.168 HTTP / 1.1 Mozilla / 5.0 +(Windows + NT + 6.0; + WOW64)+ AppleWebKit / 534.24 +(KHTML,+ like + Gecko)+ Chrome / 11.0.696.68 + Safari / 534.24 mem_user = <已编辑>; + mem_pass = <已编辑>; + PHPSESSID = <已编辑> http :// <domain> /mobile/beta/patients/list.php <domain> 502 2 2147500037 417 645 1500
Patrick

502是网关错误,不确定子状态码2是什么,并且win32错误码转换为0x80004005->访问被拒绝。如果此si仍处于beta版,我建议a)对防火墙进行防火墙保护,以防止其他攻击; b)关闭ISAPI和CGI限制只是为了再次确认这不会阻止它们运行。另外,如果您使用的是PHP,它是一个.Net应用程序吗?那边是什么关系 是.Net CAS策略阻止您运行任意EXE?认为您可能需要与Microsoft支持人员联系以解决这一问题,并加载所需的更多详细信息。
2011年

PHP使用exec的exe是.NET应用程序。将其传递给.isf,然后吐出.png。活动版本依赖于快捷的Windows服务,该服务监视文件夹中是否有新的.isf文件并自动将其转换,但是仍然留下了在请求.png之前错过其中一个的可能性。 PHP用户具有执行该文件的完全访问权限,我什至让所有人都可以运行它,但仍然一无所获。
帕特里克

另外,该exe文件经过签名,可以在不使用PHP的cmd下工作。因此,它拒绝访问某些内容,但是并没有告诉我什么,在哪里或为什么。
帕特里克

0

.exe使用PHP 执行文件,您需要cmd.exeIUSR_account的执行权限。显然,这是一个非常糟糕的主意。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.