Windows上的PHP中的Exec()没有打开cmd.exe安全漏洞?

时间:2009-04-26 01:06:07

标签: php iis system shell-exec

我要求Web脚本执行exe文件然后返回结果 关于exe请求。

我可以回显exe的结果或者修改exe以将结果保存到文件中,然后读取文件以回显Web请求。

问题是在IIS下使用php所有exec()shell_execute()system()类型函数错误输出'无法分叉',因为IIS匿名用户IUSER_%COMPUTER_NAME%无法访问C:\ windows \ SYSTEM32 \ cmd.exe的

可以通过更改此IIS匿名用户对cmd.exe的权限来解决此问题 这是显着的安全弱化(我相信)。

有没有办法可以通过IIS脚本调用Exe而无需向IIS匿名用户打开cmd.exe?

帮助表示赞赏。

为什么我需要这样做?我有一个串行密钥生成器,当somone通过信用卡购买我的产品时,我的支付处理器需要调用一个URL,将许可证名称作为参数传递,并返回该许可证名称的序列号。

我的许可证密钥生成器是WinLicense,我有一个exe。

我需要运行像

这样的东西

shell_exec(“C:\ inetpub \ wwwroot \ test.com \ testLicense.exe \”“。$ regName。”\“”); //或exec()或system()

(testLicense.exe将结果存储在我的php脚本可以回显的文件中)

1 个答案:

答案 0 :(得分:2)

非常小心地过滤您提供给exec()的变量。

仅将整数用于数字信息

如果是文件名,请使用file_exists()确认它是真实的文件名

如果它是一个字符串使用正则表达式并删除像'和'和\和;这样的任何命令都不会运行。