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实现aes加密类分享
Feb 16 PHP
PHP实现生成唯一编号(36进制的不重复编号)
Jul 01 PHP
php实现图片添加描边字和马赛克的方法
Dec 10 PHP
php计算两个文件相对路径的方法
Mar 14 PHP
使用PHPExcel操作Excel用法实例分析
Mar 26 PHP
PHP永久登录、记住我功能实现方法和安全做法
Apr 27 PHP
一波PHP中cURL库的常见用法代码示例
May 06 PHP
php获取当前url地址的方法小结
Jan 10 PHP
[原创]PHPCMS遭遇会员投稿审核无效的解决方法
Jan 11 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
Aug 18 PHP
php获取微信共享收货地址的方法
Dec 21 PHP
PHP基于session.upload_progress 实现文件上传进度显示功能详解
Aug 09 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扩展ZF――Validate扩展
2008/01/10 PHP
async和DOM Script文件加载比较
2014/07/20 PHP
分享3个php获取日历的函数
2015/09/25 PHP
php封装json通信接口详解及实例
2017/03/07 PHP
Laravel 5.2 文档 数据库 ―― 起步介绍
2019/10/21 PHP
也说JavaScript中String类的replace函数
2011/09/22 Javascript
JavaScript 数组详解
2013/10/10 Javascript
禁用JavaScript控制台调试的方法
2014/03/07 Javascript
批量修改标签css样式以input标签为例
2014/07/31 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
Vue.js实战之组件之间的数据传递
2017/04/01 Javascript
js字符串与Unicode编码互相转换
2017/05/17 Javascript
vue.js 实现图片本地预览 裁剪 压缩 上传功能
2018/03/01 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
Vue render函数实战之实现tabs选项卡组件
2019/04/22 Javascript
使用Vue实现移动端左滑删除效果附源码
2019/05/16 Javascript
vue移动端模态框(可传参)的实现
2019/11/20 Javascript
python开发之基于thread线程搜索本地文件的方法
2015/11/11 Python
Ruby元编程基础学习笔记整理
2016/07/02 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
django页面跳转问题及注意事项
2019/07/18 Python
python实现车牌识别的示例代码
2019/08/05 Python
使用Python自动生成HTML的方法示例
2019/08/06 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
节日快乐! Python画一棵圣诞树送给你
2019/12/24 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
2021/02/25 Python
用HTML5.0制作网页的教程
2010/05/30 HTML / CSS
Java的类与C++的类有什么不同
2014/01/18 面试题
高中数学教学反思
2014/01/30 职场文书
好的旅游活动方案
2014/08/19 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
百年孤独读书笔记
2015/06/29 职场文书
2015年信息化建设工作总结
2015/07/23 职场文书