checksql.php文件:在程序的开头引用
<?php
function checksql($str){//过滤
$encoding ="utf-8";
$str=trim($str);
$mgl_str="script,iframe,and,execute,update,count,mid,master,truncate,char,create,delete,insert,drop";//需要过滤的单词
$mgl_array=explode(",",$mgl_str);
if(in_array(strtolower($str),$mgl_array)){//如是单词的则不要过滤 如值直接等于delete则免过滤
return $str;
}
for($i=0;$i<count($mgl_array);$i++){
$val=$mgl_array[$i];
$len=strlen($val);
$a1=substr($val,0,1);
$new_val="&#".ord($a1).";".substr($val,1,($len-1));
$str = str_ireplace($val,$new_val,$str); //意思就是把script替换成script 其s在html上则会直接显示出s来,就像 是空格意思
}
//if(!get_magic_quotes_gpc()){
$str=addslashes($str);
//}
$str = str_ireplace("(","(",$str); ‘ascii码表中的(字符是40
$str = str_ireplace(")",")",$str); ‘ascii码表中的)字符是41,)则是html的特殊符号,跟 一样
$str = str_ireplace("`","`",$str);
return $str;
}
function unchecksql($str){//反过滤
$str=trim($str);
$mgl_str="script,iframe,and,execute,update,count,mid,master,truncate,char,create,delete,insert,drop";//需要反过滤的单词
$mgl_array=explode(",",$mgl_str);
for($i=0;$i<count($mgl_array);$i++){
$val=$mgl_array[$i];
$len=strlen($val);
$a1=substr($val,0,1);
$old_val="&#".ord($a1).";".substr($val,1,($len-1));
$str = str_ireplace($old_val,$val,$str);
}
$str = str_ireplace("(","(",$str);
$str = str_ireplace(")",")",$str);
$str = str_ireplace("`","`",$str);
$str=stripslashes($str);
return $str;
}
function checkvalues($arr){//遍历过滤数组
foreach($arr as $k =>$v){
if(is_array($v)){
$arr[$k]=checkvalues($v);
}else{
$arr[$k]=checksql($v);
}
}
return $arr;
}
?>
auto_check.asp文件:在程序的开头引用
<?php
if(isset($_GET)){
$_GET=checkvalues($_GET);
}
if(isset($_POST)){
$_POST=checkvalues($_POST);
}
if(isset($_REQUEST)){
$_REQUEST=checkvalues($_REQUEST);
}
?>
测试例子:
<?php
//垃圾asp.net 能这样子动态注册数组么,人个觉得asp.net就是一位很会耍流氓的家伙,他根本就是不让你一分钟之前就懂得怎么搞动态数组,需要花很长时间你才懂,非常繁琐
$res["title"]=123456;
$names1=array("name"=>"my2 name is delete","execute"=>"abc execute");
$names[0]=$names1;
$names2=array("name"=>"my2 name isdelete","execute"=>"4521 execute");
$names[1]=$names2;
$res["names"]=$names;
var_dump(checkvalues($arr));
//echo unchecksql("1333333333\' or 1=1 or \' script");
?>