使用PHP exec()来处理服务器上与系统相关的任务是否安全?

时间:2011-09-30 11:26:04

标签: php ftp exec quota

我正在使用PHP和Javascript开发应用程序,我需要为给定用户设置磁盘配额(因​​为我使用的是FTP守护程序(本例中为ProFTPd),以允许用户拥有自己的文档管理器所以elFinder(我正在考虑使用的文档管理器)可以“自由”运行(而不是必须创建我自己的PHP函数来控制实际使用的空间)。

这个想法是运行一个命令来调整服务器端的磁盘配额,但是......让PHP运行系统命令是安全的(即使我不接受参数或允许任何类型的用户与系统的交互)?

3 个答案:

答案 0 :(得分:3)

Usualy不安全。如果您让用户发送命令或任何其他类型的交互,则无关紧要。即使您的脚本单独运行,也可以发明漏洞以便以某种形式使用它,并可能改变它的行为。

但是,这仅适用于您希望在服务器上安装疯狂安全规则的情况。在现实世界中,您可能会损害服务器安全性的可能性很小。

我仍然有一些建议:

  1. 确保您的脚本不接受来自外部的任何输入,它不会读取数据库或文件。所有内容都必须包含在脚本中。

  2. 尝试将脚本放在documentRoot之外的某处,以便用户无法访问。

  3. 对脚本赋予一些特殊权限,使其操作仅限于运行的用户。即使有人以某种方式打破了它,操作系统也不会让他做其他事情而不是在特定环境中运行该特定命令。

  4. 这当然可以通过更多规则来完成,但这正是现在想到的。希望它有所帮助

答案 1 :(得分:2)

如果让用户输入信息,则不安全; POST或GET值没有过滤。

如果您必须使用用户输入的GET值,则应使用escapeshellarg()escapeshellcmd()

答案 2 :(得分:0)

只要您没有获得任何用户输入并且要运行该命令,使用exec()就像从命令行执行它一样安全。如果您要在命令中使用用户输入,请使用escapeshellarg()escapeshellcmd(),它应该仍然是安全的。