Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 用什么替换HTTP_GET_VARS?_Php_Http_Variables_Get - Fatal编程技术网

Php 用什么替换HTTP_GET_VARS?

Php 用什么替换HTTP_GET_VARS?,php,http,variables,get,Php,Http,Variables,Get,我正在处理遗留代码,更新它 这是用于一次删除多个条目的表单的一部分 提交表格后,代码如下: else{ //$msgcheck = db_query("DELETE FROM Comments WHERE ID = '$thisid'"); while( $xvar = each( $HTTP_GET_VARS ) ) { //print $HTTP_GET_VARS[$myvarname]; $myqrystr = "DELETE FROM

我正在处理遗留代码,更新它

这是用于一次删除多个条目的表单的一部分

提交表格后,代码如下:

else{

//$msgcheck = db_query("DELETE FROM Comments WHERE ID = '$thisid'");


while( $xvar = each( $HTTP_GET_VARS ) )
{
            //print $HTTP_GET_VARS[$myvarname];
            $myqrystr = "DELETE FROM Comments WHERE ID = '" . $xvar["value"] . "'";
            $msgcheck = db_query($myqrystr);
}
我不明白这是怎么回事?正如您从注释代码中看到的,变量是$thisid——但是后续代码如何从HTTP_GET_VARS知道这一点呢?我知道我应该使用$\u GET,但是变量从何而来

$\u得到 美元邮政 其他超全局变量在php中始终可用:


$\u GET将自动填充所有GET参数

如果您调用该URL:

test.php?param1=test&param2=ok&ert=true
您将获得以下变量:

$_GET['param1'] == 'test'
$_GET['param2'] == 'ok'
$_GET['ert'] == 'true'

$\u GET是一个超全局的:这个数组在脚本的任何部分(函数、主、类等)都是可用的。

首先,这是一个高度不安全的代码,里面有一个很好的SQL注入

这段代码通过
$HTTP\u GET\u VARS
数组,并对每个可用参数运行删除查询,您可以对
$\u GET
执行相同的操作,但在每个参数上循环实际上是一种不好的做法。 在这里,我认为查询字符串参数之一应该是一个数组,带有一个值键(类似于请求中的
?foo[value]=42
),该参数将使delete-42-query其他非数组的参数生成通知(或警告)最后是
从ID=''
的注释中删除,这些注释不删除任何内容

因此,首先,检查真正对此函数进行了什么查询(查找
foo
参数的名称)

这里的SQL注入可以是这样的:

  • ?foo[value]='或'1'='1
    :删除每一行
  • ?foo[value]=';将表格用户放在“1”='1
最后,代码应该是这样的:

如果您有数字标识符(通常更好):


好的,但是如果我把它改成这个,它仍然不起作用:while($xvar=each($\u GET))什么是“后续代码如何从HTTP\u GET\u VARS知道这个?”的意思?为什么代码“知道”变量来自何处?
$arg = $_GET['foo'];
$id = (int) $arg['value']; //<--- no more injection
$myqrystr = "DELETE FROM Comments WHERE ID = " . $id ;
$msgcheck = db_query($myqrystr);
$arg = $_GET['foo'];
$id = $arg['value'];
$myqrystr = "DELETE FROM Comments WHERE ID = :id";
$dbargs = array(':id' => $id)
$msgcheck = db_query($myqrystr, $dbargs);