我有三个 PHP 脚本。第一,我从 init 脚本开始。第二个由第一个本身启动,第二个然后使用 shell_exec
通过定期向第三个脚本传递各种参数来获取输出。
但这并没有发生。当我 var_dump
shell_exec
的输出时,在第二个脚本中,我得到了 NULL
。但是当我在第二个脚本中打印 shell_exec
中使用的实际命令并尝试将其输入到控制台时,它工作得很好!
我从启动初始化脚本的同一用户的控制台尝试了命令。
这可能是权限问题。但是我有适当的权限设置,即
- +x 用于第三个脚本
- 第三个脚本(实际上这三个脚本都是)由我使用控制台的同一个用户和组拥有
注意 - 我尝试使用 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 );
我尝试打印 $command
和 var_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/