用PHP脚本运行命令的安全问题

我想用PHP脚本运行一个命令行程序。 在VPS上这样做的安全问题是什么?

我听说很多,这是不安全的。 但是想知道具体到底是什么? 另外,那么运行命令的最好方法是什么呢?

编辑:我想运行cutycapt(一个截图工具)与xvfb运行(虚拟窗口)。 所以这将需要特权。

允许脚本运行命令行工具可能会也可能不安全。 这很大程度上取决于你在做什么。
考虑以下两种情况:

  1. 运行ls /tmp并显示输出的脚本
    这可能很好。 你可能有一个信息泄漏(有人打网页知道服务器上的/tmp的内容,这可能会让他们想法如何绕过你的安全)。

  2. 用于指定文件中用户指定string的脚本
    这可能是system("grep $user_string /some/file") :脚本会调用类似于system("grep $user_string /some/file") ,而创造性的攻击者可以找出它在做什么,插入一个额外的东西;$user_string位,然后运行任意代码作为Web服务器的用户。

你可以采取一些缓解措施来处理上面(2)(PHP有escapeshellarg()和escapeshellcmd()来帮助你),但是底线是任何时候你允许web应用程序执行你自己打开的命令命令注入攻击,你需要彻底计划,审计和保护你的代码(包括你所调用的命令),以确保你不会让自己受到攻击。

如果你想要做的事情可以用(安全编写的)本地PHP来完成,那么对于速度和安全性来说,这几乎总是一个更好的select。

为了在Apache下运行,包括通过PHP,有特权,似乎有一些协议,无密码sudo是正确的工具。

我如何从非root帐户执行根操作? 是我的一个较早的答案,更详细地讨论了这个问题,并给出了一些例子,似乎已经得到了一些批准。

我会build议我写一个shell脚本,包括任何和所有需要运行的命令。 所以PHP不会直接运行这个命令,而是使用包装脚本来完成需要的东西。 此外,您可以使用sudo并根据需要编辑sudoers以帮助您运行需要更高权限的命令。