我正在编写一个Web应用程序,其中我使用几个第三方命令在PHP中使用exec
函数调用它们(例如,我通过命令行程序渲染Latex公式)。
我的问题是:在php中执行外部命令行程序有哪些安全问题?我需要注意什么?你能给我一个要检查的要点清单吗?
编辑:我知道我必须清理用户输入以防止执行任意命令......还有其他要检查的事情吗?
提前致谢。
答案 0 :(得分:3)
小心使用escapeshellarg()转义您可能放入命令的任何传入数据。
使用所选可执行文件的绝对路径可以最大限度地降低PHP脚本调用错误文件的风险。
除此之外,我没有看到其他一些答案中的大惊小怪 - 毕竟,你不是在谈论让用户执行任意命令。 (如果我错了,请纠正我。)通常,从PHP执行外部命令是一种非常好的安全性IMO实践。
您需要记住,您调用的程序正在运行PHP用户的权限,并且可能不允许执行所有操作,但我认为您已经知道了。
答案 1 :(得分:2)
你必须注意这些事情:
针对攻击的安全机制是:
答案 2 :(得分:0)
如果允许其他人在基本路径中安装程序,您可能会发现自己没有执行预期的操作。
请注意,您使用自己的权限执行这些程序,因此如果它们以某种方式更改,您的帐户可能会受到损害。
答案 3 :(得分:0)
如何使用不清理用户输入,以便他们可以执行他们喜欢的任何命令...例如格式; - )
答案 4 :(得分:0)
最大的担忧是你几乎可以执行任何系统命令。因此,您至少需要确保用户提供的任何输入以及exec命令中使用的输入都已正确转义和验证。
这篇文章有一个很好的解释:
答案 5 :(得分:0)
对于exec来说,验证输入被极度低估了。有很多可能滥用这些你无法想象的命令(基本的例子,你有关于过滤管道和重定向吗?)。
我建议在某个安全沙箱中运行exec中的命令,以便您的操作系统不可见。但是,请记住,这很难,因为PHP将在您的操作系统中运行。
答案 6 :(得分:0)
我强烈建议逃跑。在命令行上转储不受信任的数据有点冒险。使用固定参数启动外部程序并将数据传递给它会好得多。您可能还需要拥有比您想要的更多的PHP解释器权限,或者让程序设置为whatsit-bit,这对我来说都不是特别有吸引力。