PHP 超強過濾函數
你有每次要過濾的時候總是去翻以前的過濾代碼的時候麼?
你有搜尋過如何防過濾,防攻擊的PHP解決方法麼?
你有對完全遵循'過濾輸入,避免輸出',Web界經典說辭麼?
其實這些問題,就是需要我們時常的過濾掉輸入的資料,那麼,根據寫了這麼多代碼的經驗來看,過濾白名單方式比較靠譜!
當然,你有什麼更好的代碼什麼的,歡迎留言讨論!
發現最近總是在寫過濾的一些問題,也寫了一兩年PHP了,發現過濾問題一直是個大問題,不才,下面整理出來了一個通用的基于白名單的過濾函數,
如果發現你那裡用不了,聯系我的qq852208555,一起探讨吧!
GBK GB2312 編碼的實作
<?php
//白名單過濾模式開始
$a='愛樂sdsadDDA22313\'@';
echo AlFilter($a,'CWD_','@\'');
/*過濾類分為幾種類型
* $str(待過濾字元串),$operate(操作碼),$ext(白名單擴充)
* 操作碼簡寫(不分大小寫):1.漢字C 2.數字D 3.字母W 4.特殊符号T 5.下劃線_
經典的調用模式:
隻允許數字:AlFilter($a,'D')
隻允許漢字:AlFilter($a,'C')
隻允許字母數組漢字:AlFilter($a,'CWD')
允許字母數字漢字下劃線特殊字元:AlFilter($a,'CWD_T')
擴充模式:AlFilter($a,'CWD_T','@')
AlFilter($a,'CWD_','@');//允許特殊字元 @
AlFilter($a,'CWD_','@\'');//允許特殊字元 @ '(加了反斜杠轉義)
*/
function AlFilter($str=NULL,$operate,$ext=NULL){
$str = trim(str_replace(PHP_EOL, '', $str));//去換行機制
if(!$str) return 0;
//比對模式 $pattern
$Cp="".chr(0xa1)."-".chr(0xff)."";
$Dp='0-9';
$Wp='a-zA-Z';
$Tp='@#$%^&*()-+=';
$_p='_';
$pattern="/^[";
$OArr=str_split(strtolower($operate));//拆分操作符
if (in_array('c', $OArr)) $pattern.=$Cp;
if (in_array('d', $OArr)) $pattern.=$Dp;
if (in_array('w', $OArr)) $pattern.=$Wp;
if (in_array('t', $OArr)) $pattern.=$Tp;
if (in_array('_', $OArr)) $pattern.=$_p;
if($ext) $pattern.=$ext;
$pattern.="]+$/";
if(!preg_match($pattern,$str))
return 0;
else
return $str;
}
下面是UTF-8的模式:(主要是漢字比對不同)
AlFilter($str=NULL,$operate,$ext=NULL){
$str = trim(str_replace(PHP_EOL, '', $str));//去換行機制
if(!$str) return 0;
//比對模式 $pattern
$Cp="\x{4e00}-\x{9fff}";
$Dp='0-9';
$Wp='a-zA-Z';
$Tp='@#$%^&*()-+=';
$_p='_';
$pattern="/^[";
$OArr=str_split(strtolower($operate));//拆分操作符
if (in_array('c', $OArr)) $pattern.=$Cp;
if (in_array('d', $OArr)) $pattern.=$Dp;
if (in_array('w', $OArr)) $pattern.=$Wp;
if (in_array('t', $OArr)) $pattern.=$Tp;
if (in_array('_', $OArr)) $pattern.=$_p;
if($ext) $pattern.=$ext;
$pattern.="]+$/u";
if(!preg_match($pattern,$str))
return 0;
else
return $str;
}
當然也可以隻用UTF-8 GBK的轉碼過去比對...反之亦然,不過我覺得麻煩當然有什麼更好地改進辦法,歡迎大家讨論,不吝賜教!
轉載說明來自 愛樂愛快樂 我的部落格位址:http://blog.csdn.net/lovehappying本文位址http://blog.csdn.net/lovehappying/article/details/24180003