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


Posted in PHP onOctober 26, 2015

下面通过一段代码给大家介绍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))

PHP 相关文章推荐
php 图片上传类代码
Jul 17 PHP
php地址引用(php地址引用的效率问题)
Mar 23 PHP
PHP安全性漫谈
Jun 28 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
Jun 19 PHP
php中mysql操作buffer用法详解
Mar 19 PHP
php实现RSA加密类实例
Mar 26 PHP
php类的定义与继承用法实例
Jul 07 PHP
php设计模式之委托模式
Feb 13 PHP
php制作圆形用户头像的实例_自定义封装类源代码
Sep 18 PHP
利用PHP获取汉字首字母并且分组排序详解
Oct 22 PHP
PHP支付宝当面付2.0代码
Dec 21 PHP
PHP中isset、empty的用法与区别示例详解
Nov 05 PHP
php解析url并得到url中的参数及获取url参数的四种方式
Oct 26 #PHP
php实现CSV文件导入和导出
Oct 24 #PHP
PHP错误Warning:mysql_query()解决方法
Oct 24 #PHP
php实现表单多按钮提交action的处理方法
Oct 24 #PHP
一个简单至极的PHP缓存类代码
Oct 23 #PHP
10款实用的PHP开源工具
Oct 23 #PHP
PHP制作用户注册系统
Oct 23 #PHP
You might like
深入PHP变量存储的详解
2013/06/13 PHP
php中HTTP_REFERER函数用法实例
2014/11/21 PHP
使用Laravel中的查询构造器实现增删改查功能
2019/09/03 PHP
走出JavaScript初学困境—js初学
2008/12/29 Javascript
javascript string字符串优化问题
2011/07/31 Javascript
jquery remove方法应用详解
2012/11/22 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
jQuery中大家不太了解的几个方法
2015/03/04 Javascript
javascript事件冒泡和事件捕获详解
2015/05/26 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
JS 日期与时间戮相互转化的简单实例
2016/06/22 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
javascript 面向对象function详解及实例代码
2017/02/28 Javascript
jQuery中常用动画效果函数知识点整理
2018/08/19 jQuery
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
微信小程序实现两个页面传值的方法分析
2018/12/11 Javascript
JavaScript类的继承多种实现方法
2020/05/30 Javascript
详解JavaScript作用域 闭包
2020/07/29 Javascript
使用Python发送邮件附件以定时备份MySQL的教程
2015/04/25 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
用python打开摄像头并把图像传回qq邮箱(Pyinstaller打包)
2020/05/17 Python
python 获取域名到期时间的方法步骤
2021/02/10 Python
CSS3提交意见输入框样式代码
2014/10/30 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
顶级宝石首饰网络零售商:Angara
2016/10/25 全球购物
澳大利亚相机之家:Camera House
2017/11/30 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
高一化学教学反思
2014/02/05 职场文书
机工车间主任岗位职责
2014/03/05 职场文书
工地标语大全
2014/06/18 职场文书
房地产销售助理岗位职责
2015/04/14 职场文书
中国汉字听写大会观后感
2015/06/02 职场文书
开学典礼观后感
2015/06/15 职场文书
Nginx动静分离配置实现与说明
2022/04/07 Servers