A-A+

PHP防注入代码发布

2012年05月04日 PHP技术文章 暂无评论 阅读 136 views 次

虽然php的安全比起asp来说,已经相当不错了,但在php技术当中,仍然存在 sql 注入的攻击,而通过提交的方式无非就是由传递变量$_POST、$_GET两种了,如果我们将这两种进行非法字符的过滤,攻击者就很难进行 sql 类型的攻击了,而这种防 sql攻击的技术原理却是很简单的,就是将要过滤的非法字符放到array()数组中,将其和提交过来的字符进行验证以判断传递的变量中是否含有非法字符。。

下面是一个简单的判断传递变量中是否含有非法字符的一个小程序,可以直接整合到程序当中,也可以将其和数据库进行结合起来,通过后台进行添加和删除非法字符的操作。

<?   
/*************************  
说明:  
判断传递的变量中是否含有非法字符  
 
如$_POST、$_GET  
功能:  
防注入  
*************************/  
//要过滤的非法字符   
$ArrFiltrate=array("'","or","and","union","where");   
//出错后要跳转的url,不填则默认前一页   
$StrGoUrl="";   
//是否存在数组中的值   
function FunStringExist($StrFiltrate,$ArrFiltrate){   
foreach ($ArrFiltrate as $key=>$value){   
if (eregi($value,$StrFiltrate)){   
  return true;   
}   
}   
return false;   
}   
//合并$_POST 和 $_GET   
if(function_exists(array_merge)){   
$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);   
}else{   
foreach($HTTP_POST_VARS as $key=>$value){   
$ArrPostAndGet[]=$value;   
}   
foreach($HTTP_GET_VARS as $key=>$value){   
$ArrPostAndGet[]=$value;   
}   
}   
//验证开始   
foreach($ArrPostAndGet as $key=>$value){   
if (FunStringExist($value,$ArrFiltrate)){   
echo "<script language='javascript'>alert('传递的信息中不得包含
{\',or,and,union}等非法字符请您把他们换成{‘,OR,AND,UNI
ON}');</script>";   
if (emptyempty($StrGoUrl)){   
echo "<scriptlanguage='javascript'>history.go(-1);</script>";   
}else{   
echo "<scriptlanguage='javascript'>window.location='".$
StrGoUrl."';</script>";   
}   
exit;   
}   
}   
/***************结束防止PHP注入*****************/  
?>
标签:

给我留言