PHP 过滤 $_POST 或 $_GET 接收的参数

话不多说 先放代码

/************************* 
说明: 判断传递的变量中是否含有非法字符 如$_POST、$_GET 
功能: 防注入 
*************************/
//要过滤的非法字符 
$ArrFiltrate=array("'","or","and","union","where","&","join"); 

//出错后要跳转的url,不填则默认前一页 
$StrGoUrl=""; 

//判断是否存在非法字符
function FunStringExist($StrFiltrate,$ArrFiltrate){ 
	foreach ($ArrFiltrate as $key=>$value){ 
 if (@eregi($value,$StrFiltrate)){   //eregi(规则,被验证字符串) 不区分大小写的正则表达式匹配,该函数只支持php 4,5版本
 	return true; 
    } 
} 
    return false; 
} 

//合并$_POST$_GET 
function merge_P_G($POST,$GET){
     $HTTP_POST_VARS=$POST;
     $HTTP_GET_VARS=$GET;
  foreach($HTTP_POST_VARS as $key=>$value){ 
	$ArrPostAndGet[]=$value; 
 } 
  foreach($HTTP_GET_VARS as $key=>$value){ 
	$ArrPostAndGet[]=$value; 
 } 
       return $ArrPostAndGet;
}

 //验证开始 
$ArrPostAndGet=merge_P_G($_POST,$_GET);
foreach($ArrPostAndGet as $key=>$value){ 

	if (FunStringExist($value,$ArrFiltrate)){ //返回 true 说明含有非法字符串
		if (empty($StrGoUrl)){ 
//让它返回上一步,也可以让它退出登录,还可把本次操作加入日志(该用户非法操作)
			echo "<script language='javascript'>history.go(-1);</script>"; 
		}else{ 
			echo "<script language='javascript'>window.location='".$StrGoUrl."';</script>"; 
		}
		exit; 
	} else{
	//不含有非法字符串,不做操作
		$_GET=$_GET;
		$_POST=$_POST;
	}
} 
/***************结束防止PHP注入*****************/

讲一讲博主为什么要做这个:

起初是因为博主在登录界面发现了一个 bug ,什么 bug 呢?
有个万能用户名竟然能登进博主 OA 系统,什么万能用户名呢?
’or’ 1=1,好像是这,总之它含有 or 字母,我们过滤了or 字母,就可以避免这个 bug 了


*get参数是在 url 里可见的,当我们在 = 后边输入要过滤的非法字符时,也会实现过滤 *


注 : 代码虽不是博主原创,但也是博主精心调试改进的结果,能够解决一个问题,终究是好的结果


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值