好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

PHP防注入函数代码总结 - php函数

PHP防注入函数代码总结

在php中防注入一般会写一个全局文件用来过滤特殊的字符串,本文章来总结了各种各样的php防注入函数代码,同时还可防sql注入大家可参考.

为了安全,我们常用到下面的函数来过滤一些传递过来的非法字符,PHP防注入函数,代码如下:

//要过滤的非法字符   $ArrFiltrate = array ([‘],];],]union],]select],] delete ],]‘],] or ],] and ],]=]);  //出错后要跳转的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 )){  if  ( empty empty ( $StrGoUrl )){  echo  [<script language=]javascript]>history.go(-1);</script>];  } else {  echo  [<script language=]javascript]>window.location=]". $StrGoUrl .]];</script>];  }  exit ;  }  } 

再看一个实例与上面差不多,这个是dz论坛使用的方法,代码如下:

$magic_quotes_gpc  = get_magic_quotes_gpc();   @extract(daddslashes( $_COOKIE ));   @extract(daddslashes( $_POST ));   @extract(daddslashes( $_GET ));   if (! $magic_quotes_gpc ) {   $_FILES  = daddslashes( $_FILES );   }  function  daddslashes( $string ,  $force  = 0) {   if (! $GLOBALS [ 'magic_quotes_gpc' ] ||  $force ) {   if ( is_array ( $string )) {   foreach ( $string   as   $key  =>  $val ) {   $string [ $key ] = daddslashes( $val ,  $force );   }  //开源代码phpfensi.com   }  else  {   $string  =  addslashes ( $string );   }   }   return   $string ;   } 

最后发一加强版的,代码如下:

<?php  $field  =  explode ( ',' ,  $data );  array_walk ( $field ,  array ( $this ,  'add_special_char' ));  $data  = implode( ',' ,  $field );  /**    * 对字段两边加反引号,以保证数据库安全    * @param $value 数组值    */   public   function  add_special_char(& $value ) {    if ( '*'  ==  $value  || false !==  strpos ( $value ,  '(' ) || false !==  strpos ( $value ,  '.' ) || false !==  strpos  (  $value ,  '`' )) {     //不处理包含* 或者 使用了sql方法。    }  else  {     $value  =  '`' .trim( $value ). '`' ;   }    return   $value ;  }  function  str_filter( $str ) {    $str  = htmlspecialchars (  $str  );    if  (! get_magic_quotes_gpc ()) {     $str  =  addslashes  (  $str  );   }    //过滤危险字符     return  preg_replace (  "/[" '=]|( and )|( or )|(create)|(update)|(alter)|( delete )|(insert)|(load_file)|(outfile)|( count )|(%20)|(char)/i ", " ",  $str  );  }  /*   函数名称:str_check()   函数作用:对提交的字符串进行过滤   参  数:$var: 要处理的字符串   返 回 值:返回过滤后的字符串   */   function  str_check( $str ) {    if  (! get_magic_quotes_gpc ()) {  // 判断magic_quotes_gpc是否打开      $str  =  addslashes  (  $str  );  // 进行过滤    }    $str  =  str_replace  (  "_" ,  "_" ,  $str  );  // 把 '_'过滤掉     $str  =  str_replace  (  "%" ,  "%" ,  $str  );  // 把 '%'过滤掉     return   $str ;  }    /*   函数名称:post_check()   函数作用:对提交的编辑内容进行处理   参  数:$post: 要提交的内容   返 回 值:$post: 返回过滤后的内容   */   function  post_check( $post ) {    if  (! get_magic_quotes_gpc ()) {  // 判断magic_quotes_gpc是否为打开      $post  =  addslashes  (  $post  );  // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤    }    $post  =  str_replace  (  "_" ,  "_" ,  $post  );  // 把 '_'过滤掉     $post  =  str_replace  (  "%" ,  "%" ,  $post  );  // 把 '%'过滤掉     $post  =  nl2br  (  $post  );  // 回车转换     $post  = htmlspecialchars (  $post  );  // html标记转换     return   $post ;  }  /*   函数名称:inject_check()   函数作用:检测提交的值是不是含有SQL注射的字符,防止注射,保护服务器安全   参  数:$sql_str: 提交的变量   返 回 值:返回检测结果,ture or false   */   function  inject_check( $sql_str ) {    return   eregi ( 'select|insert|and|or|update|delete|' | /*|*||./|union|into|load_file|outfile', $sql_str);     // 进行过滤   }     /*   函数名称:verify_id()   函数作用:校验提交的ID类值是否合法   参  数:$id: 提交的ID值   返 回 值:返回处理后的ID   */   function  verify_id( $id =null) {    if  (! $id ) {  exit ( '没有提交参数!' ); }      // 是否为空判断     elseif  (inject_check( $id )) {  exit ( '提交的参数非法!' ); }      // 注射判断     elseif  (! is_numeric ( $id )) {  exit ( '提交的参数非法!' ); }      // 数字判断     $id  =  intval ( $id );      // 整型化       return     $id ;  }    // $rptype = 0 表示仅替换 html标记   // $rptype = 1 表示替换 html标记同时去除连续空白字符   // $rptype = 2 表示替换 html标记同时去除所有空白字符   // $rptype = -1 表示仅替换 html危险的标记   function  HtmlReplace( $str ,  $rptype  = 0) {    $str  =  stripslashes  (  $str  );    if  ( $rptype  == 0) {     $str  = htmlspecialchars (  $str  );   }  else   if  ( $rptype  == 1) {     $str  = htmlspecialchars (  $str  );     $str  =  str_replace  (  " " ,  ' ' ,  $str  );     $str  =  ereg_replace  (  "[rnt ]{1,}" ,  ' ' ,  $str  );   }  else   if  ( $rptype  == 2) {     $str  = htmlspecialchars (  $str  );     $str  =  str_replace  (  " " ,  '' ,  $str  );     $str  =  ereg_replace  (  "[rnt ]" ,  '' ,  $str  );   }  else  {     $str  =  ereg_replace  (  "[rnt ]{1,}" ,  ' ' ,  $str  );     $str  =  eregi_replace  (  'script' ,  'script' ,  $str  );     $str  =  eregi_replace  (  "<[/]{0,1}(link|meta|ifr|fra)[^>]*>" ,  '' ,  $str  );   }    return   addslashes  (  $str  );  }  //递归ddslashes   function  daddslashes( $string ,  $force  = 0,  $strip  = FALSE) {    if  (! get_magic_quotes_gpc () ||  $force ) {     if  ( is_array  (  $string  )) {      foreach  (  $string   as   $key  =>  $val  ) {       $string  [ $key ] = daddslashes (  $val ,  $force  );     }    }  else  {      $string  =  addslashes  (  $strip  ?  stripslashes  (  $string  ) :  $string  );    }   }    return   $string ;  }    //递归stripslashes   function  dstripslashes( $string ) {    if  ( is_array  (  $string  )) {     foreach  (  $string   as   $key  =>  $val  ) {      $string  [ $key ] =  $this ->dstripslashes (  $val  );    }   }  else  {     $string  =  stripslashes  (  $string  );   }    return   $string ;  }  /**    * 安全过滤函数    * @param $string 要过滤的字符串    * @return string 返回处理过的字符串    */   function  safe_replace( $string ) {    $string  =  str_replace ( '%20' , '' , $string );    $string  =  str_replace ( '%27' , '' , $string );    $string  =  str_replace ( '%2527' , '' , $string );    $string  =  str_replace ( '*' , '' , $string );    $string  =  str_replace ( '"' , '&quot;' , $string );    $string  =  str_replace ( "'" ,'', $string );    $string  =  str_replace ( '"' , '' , $string );    $string  =  str_replace ( ';' , '' , $string );    $string  =  str_replace ( '<' , '&lt;' , $string );    $string  =  str_replace ( '>' , '&gt;' , $string );    $string  =  str_replace ( "{" , '' , $string );    $string  =  str_replace ( '}' , '' , $string );    return   $string ;  }    /**    * 使用htmlspecialchars处理字符串或数组    * @param $obj 需要处理的字符串或数组    * @return mixed 返回经htmlspecialchars处理过的字符串或数组    */   function  new_htmlspecialchars( $string ) {    if (! is_array ( $string ))    return  htmlspecialchars( $string );    foreach ( $string   as   $key  =>  $val )    $string [ $key ] = new_htmlspecialchars( $val );    return   $string ;  }    //处理禁用HTML但允许换行的内容   function  TrimMsg( $msg ) {    $msg  = trim (  stripslashes  (  $msg  ) );    $msg  =  nl2br  ( htmlspecialchars (  $msg  ) );    $msg  =  str_replace  (  "  " ,  "&nbsp;&nbsp;" ,  $msg  );    return   addslashes  (  $msg  );  }  ?> 

查看更多关于PHP防注入函数代码总结 - php函数的详细内容...

  阅读:54次