php 参数过滤、数据过滤详解

 更新时间:2015年10月26日 10:58:27   投稿:mrr  
这篇文章给大家介绍php参数过滤及php数据过滤,包括php提交数据过滤的基本原则,php简单的数据过滤,感兴趣的朋友一起学习吧

下面通过一段代码给大家介绍php参数过滤

class mysafe{
 public $logname;
 public $isshwomsg;
 function __construct(){ 
  set_error_handler('MyError',E_ALL); 
  //-----
 }
 function MyError($errno, $errstr, $errfile, $errline){  
  echo "<b>Error number:</b> [$errno],error on line $errline in $errfile<br />";
  exit;
 }
 function wlog($logs){
  if(empty($logname)){
   $this->logname=$_SERVER["DOCUMENT_ROOT"]."/log.htm";
  }  
  $Ts=fopen($this->logname,"a+");
  fputs($Ts,$logs."\r\n");
  fclose($Ts);
 }
 function showmsg($msg='',$flag=false){
  $this->isshwomsg=empty($this->isshwomsg) ? false : true;
  if ($this->isshwomsg) {
   echo '<br />--------------------------------------<br />';
   echo $msg;
   echo '<br />--------------------------------------<br />';
   if ($flag) exit;
  } 
 }
 function get_filter(){
  $getfilter="'|(and|or)\\b.+?(>|<|=|in|like)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
  foreach($_GET as $key=>$value){
   $this->StopAttack($key,$value,$getfilter);
  }
 }
 function post_filter(){
  $postfilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
  foreach($_POST as $key=>$value){
   $this->StopAttack($key,$value,$postfilter);
  }
 }
 function cookie_filter(){
  $cookiefilter="\\b(and|or)\\b.{1,6}?(=|>|<|\\bin\\b|\\blike\\b)|\\/\\*.+?\\*\\/|<\\s*script\\b|\\bEXEC\\b|UNION.+?SELECT|UPDATE.+?SET|INSERT\\s+INTO.+?VALUES|(SELECT|DELETE).+?FROM|(CREATE|ALTER|DROP|TRUNCATE)\\s+(TABLE|DATABASE)";
  foreach($_COOKIE as $key=>$value){
   $this->StopAttack($key,$value,$cookiefilter);
  }
 }
 //过滤参数 
 function StopAttack($StrFiltKey,$StrFiltValue,$ArrFiltReq){
  if(is_array($StrFiltValue)){
   $StrFiltValue=implode($StrFiltValue);
  } 
  if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue)==1){
   $msg="<br><br>操作IP: ".$_SERVER["REMOTE_ADDR"]."<br>操作时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>操作页面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交参数: ".$StrFiltKey."<br>提交数据: ".$StrFiltValue; 
   $this->wlog($msg);   
   $this->showmsg($msg);   
   exit();
  }  
 }
 function filter_value_for_sql($str){
  $str = str_replace("and","",$str);
  $str = str_replace("execute","",$str);
  $str = str_replace("update","",$str);
  $str = str_replace("count","",$str);
  $str = str_replace("chr","",$str);
  $str = str_replace("mid","",$str);
  $str = str_replace("master","",$str);
  $str = str_replace("truncate","",$str);
  $str = str_replace("char","",$str);
  $str = str_replace("declare","",$str);
  $str = str_replace("select","",$str);
  $str = str_replace("create","",$str);
  $str = str_replace("delete","",$str);
  $str = str_replace("insert","",$str);
  $str = str_replace("'","",$str);
  $str = str_replace('"',"",$str);
  $str = str_replace(" ","",$str);
  $str = str_replace("or","",$str);
  $str = str_replace("=","",$str);
  $str = str_replace(" ","",$str); 
  return $str;
 }
 //class end
}

下面给大家介绍下PHP数据过滤

1、php提交数据过滤的基本原则

1)提交变量进数据库时,我们必须使用addslashes()进行过滤,像我们的注入问题,一个addslashes()也就搞定了。其实在涉及到变量取值时,intval()函数对字符串的过滤也是个不错的选择。
2)在php.ini中开启magic_quotes_gpc和magic_quotes_runtime。magic_quotes_gpc可以把get,post,cookie里的引号变为斜杠。magic_quotes_runtime对于进出数据库的数据可以起到格式话的作用。其实,早在以前注入很疯狂时,这个参数就很流行了。
3)在使用系统函数时,必须使用escapeshellarg(),escapeshellcmd()参数去过滤,这样你也就可以放心的使用系统函数。
4)对于跨站,strip_tags(),htmlspecialchars()两个参数都不错,对于用户提交的的带有html和php的标记都将进行转换。比如尖括号"<"就将转化为 "<"这样无害的字符。
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
strip_tags($text,);
5)对于相关函数的过滤,就像先前的include(),unlink,fopen()等等,只要你把你所要执行操作的变量指定好或者对相关字符过滤严密,我想这样也就无懈可击了。

2、PHP简单的数据过滤

1)入库:  trim($str),addslashes($str)
2)出库:  stripslashes($str)
3)显示:  htmlspecialchars(nl2br($str))

相关文章

  • Laravel 加载第三方类库的方法

    Laravel 加载第三方类库的方法

    这篇文章主要介绍了Laravel 加载第三方类库的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-04-04
  • PHP如何通过AJAX方式实现登录功能

    PHP如何通过AJAX方式实现登录功能

    PHP是一门很好的语言,可以很方便的开发web应用程序,下面介绍一下Ajax+PHP+MySQL登陆示例,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法

    Laravel框架运行出错提示RuntimeException No application encryption ke

    这篇文章主要介绍了Laravel框架运行出错提示RuntimeException No application encryption key has been specified.解决方法,涉及Laravel框架相关配置、设置与运行操作技巧,需要的朋友可以参考下
    2019-04-04
  • Laravel框架创建路由的方法详解

    Laravel框架创建路由的方法详解

    这篇文章主要介绍了Laravel框架创建路由的方法,包括基础路由、多请求路由、路由参数、输出视图等相关原理与使用方法,需要的朋友可以参考下
    2019-09-09
  • 微信支付之JSAPI公众号支付详解

    微信支付之JSAPI公众号支付详解

    这篇文章主要介绍了JSAPI公众号支付的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-05-05
  • PHP中针对区域语言标记信息的操作

    PHP中针对区域语言标记信息的操作

    大家都知道Locale 类就是操作区域语言相关内容的,它无法被实例化,所有全部功能方法都是静态的。接下来通过本文给大家分享PHP中针对区域语言标记信息的操作,需要的朋友参考下吧
    2021-07-07
  • Yii使用技巧大汇总

    Yii使用技巧大汇总

    这篇文章主要介绍了Yii使用技巧,实例汇总了Yii框架使用过程中经常使用的各种常见技巧,需要的朋友可以参考下
    2015-12-12
  • php中hashtable实现示例分享

    php中hashtable实现示例分享

    对php内核有一定了解的人应该都知道php的精髓就是HashTable,这篇文章主要介绍了php中hashtable实现示例,需要的朋友可以参考下
    2014-02-02
  • 百度地图API应用之获取用户的具体位置

    百度地图API应用之获取用户的具体位置

    以前一直用高德地图的API,后来因为需求,必须用百度的地图API。这些API都已经封装的很智能了,只需要一定的编程思维,就很简单可以实现功能。
    2014-06-06
  • dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)

    dedecms 批量提取第一张图片最为缩略图的代码(文章+软件)

    用了dedecms自带的缩略图批量获取,因为代码好像是只适用于文字,对于软件就不能了,或两者都不能。从网站看到了这段代码,对于dedecms 5.1是没问题的。
    2009-10-10

最新评论