PHP防注入安全代码

  简述:/*************************

  说明:

  判断传递的变量中是否含有非法字符

  如$_POST、$_GET

  功能:防注入

  **************************/

  

复制代码 代码如下:

  <?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;

  }

  }

  ?>

  保存为checkpostandget.php

  然后在每个php文件前加include(“checkpostandget.php“);即可

  方法2

  

复制代码 代码如下:

  /* 过滤所有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;

  }