带有 get 方法的执行


exec with get method

我在 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");

无需对包含使用查询字符串(对于不起作用的初学者)。查询字符串是 URI 的一部分。你那里没有URI,它只是一些文件名。

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

附言您为变量命名的名称并不清晰易懂;)

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

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

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

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

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

    然后,通过 $argv .

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