您好我有几个关于PHP exec()和passthru()的问题。
1)
我从未在PHP中使用过exec(),但我发现它有时与imagemagick一起使用。我现在很好奇,exec在Web应用程序中有哪些其他常见用途?
2)
大约6年前,当我第一次开始玩PHP时,我真的不知道任何东西,只是非常基本的东西,我有一个网站遭到入侵,有人设置自己的PHP文件,使用passthru()函数传递一堆通过我的网站下载免费音乐或视频的流量,我收到了来自我的主机的4000美元带宽费用! 6年后,我对如何使用PHP了解得更多,但我仍然不知道之前是怎么过这种事。怎么有人可以通过错误的代码将文件添加到我的服务器?
答案 0 :(得分:4)
1]当您执行以下操作时,Exec()非常有用:
A)想要在php没有等效命令的服务器上运行程序/实用程序。例如,ffmpeg是通过exec调用运行的常用实用程序(用于各种媒体转换)。
B)运行另一个进程 - 你可以阻止或不阻止 - 这是非常强大的。有时你会删除一个pcnt_fork,或类似的,以及非阻塞的正确CL args。
C)另一个例子是当我必须处理XSLT 2.0时 - 我必须exec()一个我运行的小型java服务来处理转换。非常便利。 PHP不支持XSLT 2.0转换。2]该死,这真是太可惜了。 嗯,有很多方法。这是一个称为“远程文件包含漏洞”的漏洞系列,它基本上允许攻击者包含任意源,从而在您的服务器上执行它。 看看:http://lwn.net/Articles/203904/
另外,如上所述,请说你做的事情(很简化):
exec("someUnixUtility -f $_GET['arg1']");
好吧,想象一下攻击者,url.come?arg1 =“blah; rm -rf /”,你的代码基本上归结为:
exec("someUnixUtility -f blah; rm -rf /");
在unix中,你将命令分开;所以是的 - 这可能会造成很大的伤害。
与文件上传相同,假设您删除最后四个字符(.ext),以查找扩展名。 那么,像这样的“exploit.php.gif”,然后你剥离扩展,所以你有exploit.php,你移动到/ users / imgs /文件夹。好吧,攻击者现在要做的就是浏览到users / imgs / exploit.php,他们可以运行他们想要的任何代码。那时你已经被拥有了。
答案 1 :(得分:1)
使用exec
或想要运行其他程序。
警告
当允许用户提供的数据传递给此函数时,请使用
escapeshellarg()
或escapeshellcmd()
以确保用户无法欺骗系统执行任意命令。
有人可能在你的脚本中发现了一个安全漏洞,允许他们运行任意命令。使用给定的功能下次清理您的输入。请记住,客户端发送的任何内容都不能永远。
答案 2 :(得分:0)
exec()
允许您使用服务器上的编译代码,这些代码的运行速度比php快,后者被解释。
因此,如果您需要快速完成大量处理,exec()
可能会有用。