PHP $_POST 数组重新赋值问题

其实我是想做个防SQL注入的全局程序,我的逻辑是把$_POST数组逐个遍历然后按照我的过滤方法进行过滤。但问题是$_POST 值不能通过参数传入的方式进行修改.只能通过$_POST去重新赋值。

请看程序:
//过滤方法,如下,过滤规则请暂时无视,因为功能还没完善
function injection_clear( $arr ){
$gpc = get_magic_quotes_gpc();
if( is_array( $arr ) ){
foreach($arr as $p => $v){
if( !$gpc ){
$arr[$p] = 1;
}
$arr[$p] = str_replace( '%', '\%', $v );
$arr[$p] = str_replace( '_', '\_', $v );
}
$arr[$p] = 1;
}
}
//方法调用
$_POST['test'] = '%';
$_POST['test2'] = '1234465';
injection_clear($_POST);
print_r($_POST);

按照常理来说print出来的$_POST的值应该全部都是 1 才对啊? 求解,谢谢

可以使用$GLOBALS实现,例如这样写:

<?php
function injection_clear( $arr ){
    $gpc = get_magic_quotes_gpc();
    if( is_array( $GLOBALS[$arr] ) ){
        foreach($GLOBALS[$arr] as $p => $v){
             if( !$gpc ){
                  $GLOBALS[$arr][$p] = 1;
             }
        $GLOBALS[$arr][$p] = str_replace( '%', '\%', $v );
        $GLOBALS[$arr][$p] = str_replace( '_', '\_', $v );
    }
    $GLOBALS[$arr][$p] = 1;
    }
}
//方法调用
$_POST['test'] = '%';
$_POST['test2'] = '1234465';
injection_clear('_POST');
print_r($_POST);
?>

另外,你的逻辑好像有问题,需要调整。

追问

您好,谢谢您的回答,因为我想做SQL防注入安全功能。因为我想到的是有两种思路:
一种思路是: 对$_POST数组的单一元素进行过滤重写,但是这样子现在直接调用$_POST文件比较多改起来比较花时间成本;
另外一种思路就是现在的逻辑,在程序公用文件头部对整个POST数组进行遍历然后过滤。如果是这样子思路的话,能否请您指教下我的逻辑上存在什么问题,谢谢。

追答

我的修改你看明白的吧,是不是已经解决了你的难题:使用字符串参数,用$GLOBAL获得和修改对应字符串全局变量的值。

我认为你的代码if后面的语句应该放在else里面,也可能是我理解错了,你不别在意。

追问

呵呵,难题已经解决了,谢谢。
当然不会在意,还感谢您指出来呢。因为
str_replace方法执行的内容是自定义的规则,是无论magic_quotes_gpc有没有开启都需要执行的过滤,所以我就没有放在else 里面了。

感谢您提供的解决方案,分给您了谢谢。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-05
逻辑真是太差了z!追问

大哥,我的过滤方案还没写出来的,请注意下问题的注重点,请先回答我的问题重点,才点评我的逻辑,可以吗?

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网