PHP exec安全吗?

时间:2009-08-18 17:26:08

标签: php security exec

我正在尝试让exec在Windows服务器上工作并收到错误消息“无法分叉”。在谷歌搜索了一下之后,似乎推荐的修复方法是将IUSR帐户的READ和EXECUTE权限授予c:\ Windows \ System32 \ cmd.exe。

但那已成为一个重要的安全漏洞吗?安全吗?还有另一种方法来执行[来自php]服务器上的exe吗?

2 个答案:

答案 0 :(得分:14)

它需要执行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']));

答案 1 :(得分:1)

您应该记住的一件事是,在Windows下创建进程会产生比在Unix类操作系统上更多的开销。如果您有大量用户,反复调用exec()可能会使服务器陷入困境。如果您预计服务器负载过重,您可能需要考虑将工作进程连续运行为Windows service