Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/294.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP exec()在服务器上处理与系统相关的任务是否安全?_Php_Ftp_Exec_Quota - Fatal编程技术网

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

使用PHP exec()在服务器上处理与系统相关的任务是否安全?,php,ftp,exec,quota,Php,Ftp,Exec,Quota,我正在用PHP和Javascript开发一个应用程序,我需要为给定的用户设置磁盘配额(因为我使用FTP守护进程(本例中为ProFTPd)允许用户拥有自己的文档管理器),以便elFinder(我目前正在考虑使用的文档管理器)可以“自由”运行(无需创建自己的PHP函数来控制实际使用的空间) 我们的想法是运行一个命令来调整服务器端的磁盘配额,但是…让PHP运行系统命令安全吗(即使我不接受参数或不允许任何类型的用户与系统交互)?如果让用户输入信息;发布或获取值而不进行过滤,这是不安全的 如果必须使用用户

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


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

如果让用户输入信息;发布或获取值而不进行过滤,这是不安全的

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


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

通常是不安全的。是否允许用户发送命令或任何其他类型的交互并不重要。即使脚本单独运行,也可以发明利用漏洞以某种形式使用它也许会改变它的行为

但是,只有当你想在你的服务器上有疯狂的安全规则时,这才适用。在现实世界中,你破坏服务器安全的可能性很小

我仍然有一些建议给你:

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

  • 尝试将脚本放在documentRoot之外的某个位置,以便用户无法访问它

  • 在脚本上设置一些特殊权限,使其操作仅限于作为其运行的用户。即使有人以某种方式破坏了脚本,操作系统也不会让他执行其他操作,而只是在特定环境中运行该特定命令


  • 当然,这可能需要更多的规则来完成,但这正是我们现在想到的。希望它对第3点有所帮助

    您如何正确地做到这一点?请您详细说明一下?@Jimbo chown X:Y script.php。这很简单。最好的方法是以CLI而不是从Web服务器运行php脚本。然后您可以制定一个cron规则来运行it。脚本的所有者需要有权限来调整配额,但仅此而已。第3点背后的想法是,经常会将脚本编辑为root(因此所有者是root),然后将chmod 777放在上面,这样每个人都可以编辑它。我不会用
    chmod 777
    将其公开。