0

您好我有几个关于 PHP exec() 和 passthru() 的问题。

1)
我从未在 PHP 中使用过 exec(),但我看到它有时与 imagemagick 一起使用。我现在很好奇, exec 在 Web 应用程序中的其他一些常见用途是什么?

2)
大约 6 年前,当我第一次开始玩 PHP 时,我真的什么都不知道,只是非常基本的东西,而且我有一个网站遭到入侵,有人在那里设置了自己的 PHP 文件,该文件使用 passthru() 函数传递大量流量通过我的网站下载免费音乐或视频,我的主机向我收取了 4,000 美元的带宽费用!6 年后,我对如何使用 PHP 有了更多的了解,但我仍然不知道这以前是怎么发生在我身上的。有人怎么能通过错误的代码向我的服务器添加文件?

4

3 回答 3

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 并且他们可以运行他们想要的任何代码。那时你已经拥有了。

于 2010-01-08T22:24:15.407 回答
1
  1. exec当您想运行不同的程序时使用或。

  2. passthru的文档说:

警告

当允许将用户提供的数据传递给此函数时,使用escapeshellarg()orescapeshellcmd()以确保用户不能欺骗系统执行任意命令。

有人可能在您的脚本中发现了允许他们运行任意命令的安全漏洞。下次使用给定的函数清理您的输入。请记住,从客户端发送的任何内容都不能被信任。

于 2010-01-08T22:11:13.380 回答
0

exec()允许您使用服务器上的已编译代码,它比解释的 php 运行得更快。

因此,如果您有大量需要快速完成的处理,exec()可能会很有用。

于 2010-01-08T21:58:38.223 回答