简单实用的PHP防注入类实例


Posted in PHP onDecember 05, 2014

本文实例讲述了简单实用的PHP防注入类。分享给大家供大家参考。具体如下:

PHP防注入注意要过滤的信息基本是get,post,然后对于sql就是我们常用的查询,插入等等sql命令了,下面我给各位整理两个简单的例子,希望这些例子能给你网站带来安全.

PHP防注入类代码如下:

<?php 

/** 

 * 参数处理类 

 * @author JasonWei 

 */ 

class Params 

{ 

    public $get = array(); 

 

    public $post = array(); 

 

    function __construct() 

    { 

 if (!emptyempty($_GET)) { 

     foreach ($_GET as $key => $val) { 

 if (is_numeric($val)) { 

     $this->get[$key] = $this->getInt($val); 

 } else { 

     $this->get[$key] = $this->getStr($val); 

 } 

     } 

 } 

 if (!emptyempty($_POST)) { 

     foreach ($_POST as $key => $val) { 

 if (is_numeric($val)) { 

     $this->post[$key] = $this->getInt($val); 

 } else { 

     $this->post[$key] = $this->getStr($val); 

 } 

     } 

 } 

    } 

 

    public function getInt($number) 

    { 

 return intval($number); 

    } 

 

    public function getStr($string) 

    { 

 if (!get_magic_quotes_gpc()) { 

     $string = addslashes($string); 

 } 

 return $string; 

    } 

 

    public function checkInject($string) 

    { 

 return eregi('select|insert|update|delete|/*|*|../|./|union|into|load_file|outfile', $string); 

    } 

 

    public function verifyId($id = null) 

    { 

 if (!$id || $this->checkInject($id) || !is_numeric($id)) { 

     $id = false; 

 } else { 

     $id = intval($id); 

 }

 return $id; 

    } 

} 

?>

例子二,代码如下:
<?php  

/*************************   

说明:     

判断传递的变量中是否含有非法字符     

    

如$_POST、$_GET     

功能:     

防注入     

*************************/     

//要过滤的非法字符      

$ArrFiltrate=array("'","or","and","union","where");      

//出错后要跳转的url,不填则默认前一页      

$StrGoUrl="";      

//是否存在数组中的值      

function FunStringExist($StrFiltrate,$ArrFiltrate){      

foreach ($ArrFiltrate as $key=>$value){      

if (eregi($value,$StrFiltrate)){      

  return true;      

}      

}      

return false;      

}      

//合并$_POST 和 $_GET      

if(function_exists(array_merge)){      

$ArrPostAndGet=array_merge($HTTP_POST_VARS,$HTTP_GET_VARS);      

}else{      

foreach($HTTP_POST_VARS as $key=>$value){      

$ArrPostAndGet[]=$value;      

}      

foreach($HTTP_GET_VARS as $key=>$value){      

$ArrPostAndGet[]=$value;      

}      

}      

//验证开始      

foreach($ArrPostAndGet as $key=>$value){      

if (FunStringExist($value,$ArrFiltrate)){      

echo "<script language='javascript'>alert('传递的信息中不得包含{',or,and,union}等非法字符请您把他们换成{‘,OR,AND,UNION}');</script>";      

if (emptyempty($StrGoUrl)){      

echo "<scriptlanguage='javascript'>history.go(-1);</script>";      

}else{      

echo "<scriptlanguage='javascript'>window.location='".$StrGoUrl."';</script>";      

}      

exit;      

}      

}      

/***************结束防止PHP注入*****************/     

?>

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
深入理解用mysql_fetch_row()以数组的形式返回查询结果
Jun 05 PHP
解析thinkphp基本配置 convention.php
Jun 18 PHP
50个PHP程序性能优化的方法
Jun 02 PHP
PHP闭包实例解析
Sep 08 PHP
Windows下安装PHP单元测试环境PHPUnit图文教程
Oct 24 PHP
CodeIgniter扩展核心类实例详解
Jan 20 PHP
php5.4传引用时报错问题分析
Jan 22 PHP
PHP数学运算函数大汇总(经典值得收藏)
Apr 01 PHP
Zend Studio使用技巧两则
Apr 01 PHP
PHP7新特性之抽象语法树(AST)带来的变化详解
Jul 17 PHP
Yii2框架自定义验证规则操作示例
Feb 08 PHP
Centos7 Yum安装PHP7.2流程教程详解
Jul 02 PHP
ThinkPHP连接数据库的方式汇总
Dec 05 #PHP
PHP生成RSS文件类实例
Dec 05 #PHP
php实现两表合并成新表并且有序排列的方法
Dec 05 #PHP
ThinkPHP中redirect用法分析
Dec 05 #PHP
php查询ip所在地的方法
Dec 05 #PHP
smarty实现多级分类的方法
Dec 05 #PHP
Codeigniter框架实现获取分页数据和总条数的方法
Dec 05 #PHP
You might like
PHP采用XML-RPC构造Web Service实例教程
2014/07/16 PHP
php实现将Session写入数据库
2015/07/26 PHP
PHP编写文件多服务器同步程序
2016/07/02 PHP
php表单文件iframe异步上传实例讲解
2017/07/26 PHP
Laravel使用模型实现like模糊查询的例子
2019/10/24 PHP
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
2006/11/30 Javascript
IE与firefox之jquery用法区别
2008/10/03 Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
2009/12/07 Javascript
javascript图片预加载实例分析
2015/07/16 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
2016/10/30 Javascript
Javascript创建类和对象详解
2017/05/31 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
解决vue build打包之后首页白屏的问题
2018/03/06 Javascript
使用Vue如何写一个双向数据绑定(面试常见)
2018/04/20 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
vant-ui组件调用Dialog弹窗异步关闭操作
2020/11/04 Javascript
[01:16:50]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第一场 3月7日
2021/03/11 DOTA
python实现系统状态监测和故障转移实例方法
2013/11/18 Python
Python类的用法实例浅析
2015/05/27 Python
详解python分布式进程
2018/10/08 Python
浅析python的优势和不足之处
2018/11/20 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
Maisons du Monde德国:法国家具和装饰的市场领导者
2019/07/26 全球购物
string = null 和string = ''的区别
2013/04/28 面试题
初三家长会邀请函
2014/01/18 职场文书
违反工作纪律检讨书
2014/02/15 职场文书
《望庐山瀑布》教学反思
2014/04/22 职场文书
人力资源职位说明书
2014/07/29 职场文书
效能风暴心得体会
2014/09/04 职场文书
处级领导干部四风问题自我剖析材料
2014/09/29 职场文书
员工辞职信范文
2015/03/02 职场文书
2015年信息技术教研组工作总结
2015/07/22 职场文书
python读取mnist数据集方法案例详解
2021/09/04 Python
浅谈MySQL函数
2021/10/05 MySQL
「回转企鹅罐」10周年纪念展「輪るピングドラム展」海报公开
2022/03/22 日漫
Elasticsearch 数据类型及管理
2022/04/19 Python