其实我是想做个防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å®ç°ï¼ä¾å¦è¿æ ·åï¼
<?phpfunction 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 éé¢äºã
æè°¢æ¨æä¾ç解å³æ¹æ¡ï¼åç»æ¨äºè°¢è°¢ã
大哥,我的过滤方案还没写出来的,请注意下问题的注重点,请先回答我的问题重点,才点评我的逻辑,可以吗?