exec with get方法

时间:2012-08-12 16:43:32

标签: php post

我在PHP 5.3.15上的VPS(Linux)上运行CentOS。我需要知道如何发布获取数据。当我进入页面时,它是空白的。

以下是代码:

第一次尝试:

$a = $_POST['a'];
$c = $_POST['b'];
$c = $_POST['c'];
$d = $_POST['d'];
$k = include("newb.php?a=$a&b=$b&c=$c&&d=$d");
exec("php newb.php?a=$a&b=$b&c=$c&&d=$d");

第二次尝试:

$a = $_POST['a'];
$c = $_POST['b'];
$c = $_POST['c'];
$d = $_POST['d'];
$k = include("newb.php?a=$a&b=$b&c=$c&&d=$d");
exec("php $k");

2 个答案:

答案 0 :(得分:0)

不需要为include包含查询字符串(对于不起作用的启动程序)。查询字符串是URI的一部分。你所拥有的不是一个URI,它只是一些文件名。

包含的文件已经可以访问已定义的变量。

P.S。你给变量的名字并不是很清楚易懂;)

P.P.S。你想做什么?因为几乎可以肯定有更好的方法。

答案 1 :(得分:0)

查询字符串(带有?key=value的部分)是URL的一部分。它只能在您的地址栏中使用。您不能使用查询字符串调用命令行脚本,也不能在包含的文件中使用它们。

  • 对于包含的文件,只需包含文件,它就可以访问您声明的任何变量:

    include("newb.php");
    
  • 对于已执行的文件,将参数传递给命令,就像在命令行上一样:一次一个,用空格分隔:

    exec("php newb.php $a $b $c $d");
    

    然后,通过$argv

  • 访问它们

请注意,您的代码中存在严重漏洞。您要传递任意值以在命令行上执行。如果攻击者将"`rm -rf /`"发布到您的程序,您将盲目地删除服务器上的每个文件。您必须从不盲目地将用户提交的数据作为代码执行,这实际上就是您在此处所做的。