我在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");
答案 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 /`"
发布到您的程序,您将盲目地删除服务器上的每个文件。您必须从不盲目地将用户提交的数据作为代码执行,这实际上就是您在此处所做的。