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¶m2=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);