shell_exec返回NULL,但是从控制台尝试时,它可以正常工作

时间:2011-10-17 04:14:51

标签: linux daemon php

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

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

我尝试从启动init脚本的同一用户的控制台发出命令。

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

  1. + x代表第三个脚本
  2. 第三个脚本(实际上所有三个脚本都是)由我使用控制台的同一个用户和组拥有
  3. 注意 - 我尝试使用shebang启动第三个脚本,同时删除shebang并在脚本路径之前添加php。 root用一切都运行良好。

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

    更新:第二个脚本中使用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 ) )。前者返回预期的内容(params),后者返回NULL

1 个答案:

答案 0 :(得分:-2)

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

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

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

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

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

答案:您的整个服务器已被删除(或至少PHP脚本用户可以触摸的任何内容)。当然,人们还可以做其他更阴险的事情。而且,自动扫描程序可以找到 这类漏洞,而自动扫描程序又可以自动根据您的服务器。

所以不要炮轰,特别是当你刚刚调用另一个PHP脚本时。将代码放入函数中,包含包含它的php文件,并在需要数据时调用函数。