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 相关文章推荐
mysql5详细安装教程
Jan 15 PHP
PHP 源代码压缩小工具
Dec 22 PHP
超级好用的一个php上传图片类(随机名,缩略图,加水印)
Jun 30 PHP
PHP分页效率终结版(推荐)
Jul 01 PHP
ThinkPHP让分页保持搜索状态的方法
Jul 02 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
Nov 14 PHP
PHP中通过trigger_error触发PHP错误示例
Jun 23 PHP
Yii2 GridView实现列表页直接修改数据的方法
May 16 PHP
PHP登录验证码的实现与使用方法
Jul 07 PHP
php使用escapeshellarg时中文被过滤的解决方法
Jul 10 PHP
Zend Framework教程之Zend_Helpers动作助手ViewRenderer用法详解
Jul 20 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
Dec 12 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
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
PHP 和 XML: 使用expat函数(一)
2006/10/09 PHP
php结合飞信 免费天气预报短信
2009/05/07 PHP
php printf输出格式使用说明
2010/12/05 PHP
Dwz与thinkphp整合下的数据导出到Excel实例
2014/12/04 PHP
php快速查找数据库中恶意代码的方法
2015/04/01 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
ThinkPHP打水印及设置水印位置的方法
2016/10/14 PHP
event.srcElement+表格应用
2006/08/29 Javascript
javascript常用正则表达式汇总
2015/07/31 Javascript
javascript如何写热点图
2015/12/08 Javascript
全屏滚动插件fullPage.js使用实例解析
2016/10/21 Javascript
关于微信上网页图片点击全屏放大效果
2016/12/19 Javascript
canvas学习之API整理笔记(二)
2016/12/29 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
Bootstrap布局之栅格系统学习笔记
2017/05/04 Javascript
Javascript实现一个简单的输入关键字添加标签效果实例
2017/06/01 Javascript
使用react-router4.0实现重定向和404功能的方法
2017/08/28 Javascript
vuejs使用$emit和$on进行组件之间的传值的示例
2017/10/04 Javascript
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
React中常见的动画实现的几种方式
2018/01/10 Javascript
微信小程序实现弹出菜单
2018/07/19 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
解决Vue的项目使用Element ui 走马灯无法实现的问题
2020/08/03 Javascript
vue+elementUI中表格高亮或字体颜色改变操作
2020/11/02 Javascript
[01:46]2020完美世界全国高校联赛秋季赛报名开启
2020/10/15 DOTA
python实现域名系统(DNS)正向查询的方法
2016/04/19 Python
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
使用Python和xlwt向Excel文件中写入中文的实例
2018/04/21 Python
python的turtle库使用详解
2019/05/10 Python
什么是python类属性
2020/06/10 Python
python tkiner实现 一个小小的图片翻页功能的示例代码
2020/06/24 Python
基本公共卫生服务健康教育工作方案
2014/05/22 职场文书
建党伟业观后感
2015/06/01 职场文书
工作经历证明范本
2015/06/15 职场文书
Css预编语言及区别详解
2021/04/25 HTML / CSS