php 防注入的一些方法

判断传递的变量中是否含有非法字符我们把以下代码放到一个公共的文件里,比如security.inc.php里面,每个文件里都include一下这个文件,那么就能够给任何一个程序进行提交的所有变量进行过滤了,就达到了我们一劳永逸的效果。 

 
 
简述:/************************* 
说明: 
判断传递的变量中是否含有非法字符 
如$_POST、$_GET 
功能:防注入 
**************************/ 
把以下代码复制保存为:chkreqdata.php,在需要过滤的页面加入include("chkreqdata.php");
方法一:

PHP代码
  1. <?php   
  2. // 要过滤的非法字符  
  3. $ArrFiltrate = array("’"";""union");   
  4. // 出错后要跳转的url,不填则默认前一页  
  5. $StrGoUrl = "";   
  6. // 是否存在数组中的值  
  7. function FunStringExist($StrFiltrate$ArrFiltrate)  
  8. {  
  9.     foreach ($ArrFiltrate as $key => $value) {  
  10.         if (eregi($value$StrFiltrate)) {  
  11.             return true;  
  12.         }   
  13.     }   
  14.     return false;  
  15. }   
  16. // 合并$_POST 和 $_GET  
  17. if (function_exists(array_merge)) {  
  18.     $ArrPostAndGet = array_merge($HTTP_POST_VARS$HTTP_GET_VARS);  
  19. else {  
  20.     foreach($HTTP_POST_VARS as $key => $value) {  
  21.         $ArrPostAndGet[] = $value;  
  22.     }   
  23.     foreach($HTTP_GET_VARS as $key => $value) {  
  24.         $ArrPostAndGet[] = $value;  
  25.     }   
  26. }   
  27. // 验证开始  
  28. foreach($ArrPostAndGet as $key => $value) {  
  29.     if (FunStringExist($value$ArrFiltrate)) {  
  30.         echo "<script language=\"javascript\">alert(\"非法字符\");</script>";  
  31.         if (emptyempty($StrGoUrl)) {  
  32.             echo "<script language=\"javascript\">history.go(-1);</script>";  
  33.         } else {  
  34.             echo "<script language=\"javascript\">window.location=\"" . $StrGoUrl . "\";</script>";  
  35.         }   
  36.         exit;  
  37.     }   
  38. }   
  39.   
  40. ?>   

方法二:

PHP代码
  1. <?php  
  2. /** 
  3.  * 过滤所有GET过来变量 
  4.  */  
  5. foreach ($_GET as $get_key => $get_var) {  
  6.     if (is_numeric($get_var)) {  
  7.         $get[strtolower($get_key)] = get_int($get_var);  
  8.     } else {  
  9.         $get[strtolower($get_key)] = get_str($get_var);  
  10.     }   
  11. }   
  12.   
  13. /** 
  14.  * 过滤所有POST过来的变量 
  15.  */  
  16. foreach ($_POST as $post_key => $post_var) {  
  17.     if (is_numeric($post_var)) {  
  18.         $post[strtolower($post_key)] = get_int($post_var);  
  19.     } else {  
  20.         $post[strtolower($post_key)] = get_str($post_var);  
  21.     }   
  22. }   
  23.   
  24. /** 
  25.  * 过滤函数 
  26.  */  
  27. // 整型过滤函数  
  28. function get_int($number)  
  29. {  
  30.     return intval($number);  
  31. }   
  32. // 字符串型过滤函数  
  33. function get_str($string)  
  34. {  
  35.     if (!get_magic_quotes_gpc()) {  
  36.         return addslashes($string);  
  37.     }   
  38.     return $string;  
  39. }   
  40.   
  41. ?>  



发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>