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 相关文章推荐
ZF等常用php框架中存在的问题
Jan 10 PHP
PHP中feof()函数实例测试
Aug 23 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
Mar 04 PHP
PHP异常处理Exception类
Dec 11 PHP
php采集神器cURL使用方法详解
Feb 19 PHP
php ajax实现文件上传进度条
Mar 29 PHP
php数据访问之增删改查操作
May 09 PHP
PHP环境搭建的详细步骤
Jun 30 PHP
php+ajax注册实时验证功能
Jul 20 PHP
Laravel框架查询构造器 CURD操作示例
Sep 04 PHP
laravel 之 Eloquent 模型修改器和序列化示例
Oct 17 PHP
PHP后门隐藏的一些技巧总结
Nov 04 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
如何提高MYSQL数据库的查询统计速度 select 索引应用
2007/04/11 PHP
MySQL授权问题总结
2007/05/06 PHP
为IP查询添加GOOGLE地图功能的代码
2010/08/08 PHP
php简单日历函数
2015/10/28 PHP
PHP实现163邮箱自动发送邮件
2016/03/29 PHP
yum命令安装php7和相关扩展
2016/07/04 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
php实现微信公众号创建自定义菜单功能的实例代码
2019/06/11 PHP
提高 DHTML 页面性能
2006/12/25 Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
2010/04/01 Javascript
Json字符串转换为JS对象的高效方法实例
2013/05/01 Javascript
onbeforeunload与onunload事件异同点总结
2013/06/24 Javascript
jQuery实现提交按钮点击后变成正在处理字样并禁止点击的方法
2015/03/24 Javascript
学习Bootstrap组件之下拉菜单
2015/07/28 Javascript
纯CSS3代码实现滑动开关效果
2015/08/19 Javascript
js实现简单计算器
2015/11/22 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
在Docker快速部署Node.js应用的详细步骤
2016/09/02 Javascript
原生JS实现匀速图片轮播动画
2016/10/18 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
详解JavaScript调用栈、尾递归和手动优化
2017/06/03 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
JavaScript常见JSON操作实例分析
2018/08/08 Javascript
让python在hadoop上跑起来
2016/01/27 Python
Django小白教程之Django用户注册与登录
2016/04/22 Python
Python利用PyPDF2库获取PDF文件总页码实例
2020/04/03 Python
python实现控制台输出彩色字体
2020/04/05 Python
html5利用canvas绘画二级树形结构图的示例
2017/09/27 HTML / CSS
乐天旅游香港网站:日本饭店预订
2017/11/29 全球购物
JACK & JONES荷兰官网:男士服装和鞋子
2021/03/07 全球购物
中专生的个人自我评价
2013/12/11 职场文书
2014年师德师风自我剖析材料
2014/09/27 职场文书
2014年后勤工作总结
2014/11/18 职场文书
教师节随笔
2015/08/15 职场文书
Pytest中conftest.py的用法
2021/06/27 Python