linux - shell_exec 返回 NULL 但是当从控制台尝试时,它有效

标签 linux daemon php

我有三个 PHP 脚本。第一,我从 init 脚本开始。第二个由第一个本身启动,第二个然后使用 shell_exec 通过定期向第三个脚本传递各种参数来获取输出。

但这并没有发生。当我 var_dump shell_exec 的输出时,在第二个脚本中,我得到了 NULL。但是当我在第二个脚本中打印 shell_exec 中使用的实际命令并尝试将其输入到控制台时,它工作得很好!

我从启动初始化脚本的同一用户的控制台尝试了命令。

这可能是权限问题。但是我有适当的权限设置,即

  1. +x 用于第三个脚本
  2. 第三个脚本(实际上这三个脚本都是)由我使用控制台的同一个用户和组拥有

注意 - 我尝试使用 shebang 启动第三个脚本,以及删除 shebang 并在脚本路径前添加 php。使用 root 一切正常。

此外,还有一点要注意,第一个脚本将第二个脚本的输出重定向到一个日志文件(这是我发现第三个脚本在 shell_exec 上返回 NULL 的地方)

更新:第二个脚本中使用 shell_exec

的代码
$command = "/var/data/user-data.php '{$user}' '{$request['token']}' '{$request['secret']}'";
$data = json_decode( shell_exec( $command ), true );   

我尝试打印 $commandvar_dump( shell_exec( $command ) )。前者返回预期的内容(参数),后者返回 NULL

最佳答案

没有直接评论问题是什么-

停止。不要掏空。这是一个安全雷区。

$command = "/var/data/user-data.php '{$user}' '{$request['token']}' '{$request['secret']}'";

如果用户通过会发生什么,比如说:

http://yoursite.com/index.php?token=';rm -rf / #

答案:您的整个服务器已被删除(或至少是 PHP 脚本用户可以访问的任何内容)。人们自然可以做其他更阴险的事情。并且这种漏洞可以并且被自动扫描器发现,而自动扫描器又会自动为您的服务器设置根目录。

所以不要花钱,尤其是当您只是调用另一个 PHP 脚本时。将您的代码放入函数中,包括包含它的 php 文件,并在需要数据时调用该函数。

关于linux - shell_exec 返回 NULL 但是当从控制台尝试时,它有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7789312/

相关文章:

linux - 虚拟分钟 : multiple subdomains to single directory

linux - 防止 gtk FileChooserDialog 在目录中的所有文件上调用 stat?

mysql - 通过 linux 命令行创建 mysql 用户?

php - 将 Javascript 变量传递给 PHP POST

php - 包含,需要语法错误文件

linux - 验证初始拥塞窗口中的变化

linux - 创建自定义 Ubuntu 守护进程

linux - 当在 perl 中收到任何信号时, sleep 会被打断吗?

php - 让php脚本作为linux服务运行

php - 选择具有相同列 a 但不同列 b 的值