通俗易懂的php防注入代码

  介绍两种方法吧,首先请把以下代码保存为safe.php放在网站根目录下,然后在每个php文件前加include(“/safe.php“);即可 :

  php防注入代码方法一:

  

复制代码 代码如下:

  <?php

  //要过滤的非法字符

  $ArrFiltrate=array(”‘”,”;”,”union”);

  //出错后要跳转的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(\”非法字符\”);</script>”;

  if (emptyempty($StrGoUrl)){

  echo “<script language=\”javascript\”>history.go(-1);</script>”;

  }else{

  echo “<script language=\”javascript\”>window.location=\””.$StrGoUrl.”\”;</script>”;

  }

  exit;

  }

  }

  ?>

  php防注入代码方法二:

  

复制代码 代码如下:

  /* 过滤所有GET过来变量 */

  foreach ($_GET as $get_key=>$get_var)

  {

  if (is_numeric($get_var)) {

  $get[strtolower($get_key)] = get_int($get_var);

  } else {

  $get[strtolower($get_key)] = get_str($get_var);

  }

  }

  /* 过滤所有POST过来的变量 */

  foreach ($_POST as $post_key=>$post_var)

  {

  if (is_numeric($post_var)) {

  $post[strtolower($post_key)] = get_int($post_var);

  } else {

  $post[strtolower($post_key)] = get_str($post_var);

  }

  }

  /* 过滤函数 */

  //整型过滤函数

  function get_int($number)

  {

  return intval($number);

  }

  //字符串型过滤函数

  function get_str($string)

  {

  if (!get_magic_quotes_gpc()) {

  return addslashes($string);

  }

  return $string;

  }