php中过滤非法字符的具体实现


Posted in PHP onOctober 29, 2013
<?php 
class sqlsafe { 
private $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)"; 
private $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)"; 
private $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)"; 
/** 
* 构造函数 
*/ 
public function __construct() { 
foreach($_GET as $key=>$value){$this->stopattack($key,$value,$this->getfilter);} 
foreach($_POST as $key=>$value){$this->stopattack($key,$value,$this->postfilter);} 
foreach($_COOKIE as $key=>$value){$this->stopattack($key,$value,$this->cookiefilter);} 
} 
/** 
* 参数检查并写日志 
*/ 
public function stopattack($StrFiltKey, $StrFiltValue, $ArrFiltReq){ 
if(is_array($StrFiltValue))$StrFiltValue = implode($StrFiltValue); 
if (preg_match("/".$ArrFiltReq."/is",$StrFiltValue) == 1){ 
$this->writeslog($_SERVER["REMOTE_ADDR"]." ".strftime("%Y-%m-%d %H:%M:%S")." ".$_SERVER["PHP_SELF"]." ".$_SERVER["REQUEST_METHOD"]." ".$StrFiltKey." ".$StrFiltValue); 
showmsg('您提交的参数非法,系统已记录您的本次操作!','',0,1); 
} 
} 
/** 
* SQL注入日志 
*/ 
public function writeslog($log){ 
$log_path = CACHE_PATH.'logs'.DIRECTORY_SEPARATOR.'sql_log.txt'; 
$ts = fopen($log_path,"a+"); 
fputs($ts,$log."\r\n"); 
fclose($ts); 
} 
} 
?>
PHP 相关文章推荐
一个php作的文本留言本的例子(六)
Oct 09 PHP
MySQL连接数超过限制的解决方法
Jul 17 PHP
用php制作简单分页(从数据库读取记录)的方法详解
May 04 PHP
php实现mysql封装类示例
May 07 PHP
php生成圆角图片的方法
Apr 07 PHP
PHP中如何判断exec函数执行成功?
Aug 04 PHP
php、java、android、ios通用的3des方法(推荐)
Sep 09 PHP
php中static 静态变量和普通变量的区别
Dec 01 PHP
探究Laravel使用env函数读取环境变量为null的问题
Dec 06 PHP
PHP实现文件上传操作和封装
Mar 04 PHP
phpmyadmin在宝塔面板里进不去的解决方案
Jul 06 PHP
PHP Ajax跨域问题解决方案代码实例
Aug 01 PHP
PHP时间戳 strtotime()使用方法和技巧
Oct 29 #PHP
PHP页面中文乱码分析
Oct 29 #PHP
php四种基础算法代码实例
Oct 29 #PHP
教你如何使用php session
Oct 28 #PHP
php字符编码转换之gb2312转为utf8
Oct 28 #PHP
使用PHP curl模拟浏览器抓取网站信息
Oct 28 #PHP
php header功能的使用
Oct 28 #PHP
You might like
地摊中国 - 珍藏老照片
2020/08/18 杂记
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
2017/05/20 PHP
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
解析URI与URL之间的区别与联系
2013/11/22 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
js闭包实例汇总
2014/11/09 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
JavaScript通过prototype给对象定义属性用法实例
2015/03/23 Javascript
JQuery中clone方法复制节点
2015/05/18 Javascript
JavaScript地理位置信息API
2016/06/11 Javascript
深入理解JavaScript中Ajax
2016/08/02 Javascript
用jquery的attr方法实现图片切换效果
2017/02/05 Javascript
Bootstrap标签页(Tab)插件使用方法
2017/03/21 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
说说node中的可读流和可写流的区别
2018/06/01 Javascript
JavaScript中发出HTTP请求最常用的方法
2018/07/12 Javascript
vue-cli3.0+element-ui上传组件el-upload的使用
2018/12/03 Javascript
微信小程序bindinput与bindsubmit的区别实例分析
2019/04/17 Javascript
ElementUI中el-tree节点的操作的实现
2020/02/27 Javascript
python获取当前运行函数名称的方法实例代码
2017/04/06 Python
使用requests库制作Python爬虫
2018/03/25 Python
python 实时得到cpu和内存的使用情况方法
2018/06/11 Python
python操作文件的参数整理
2019/06/11 Python
Python tkinter实现图片标注功能(完整代码)
2019/12/08 Python
tensorflow的计算图总结
2020/01/12 Python
pycharm 2020 1.1的安装流程
2020/09/29 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
全球高级音频和视频专家:HiDef Lifestyle
2019/08/02 全球购物
《得道多助,失道寡助》教学反思
2014/04/19 职场文书
小学领导班子对照材料
2014/08/23 职场文书
转让协议书范本
2014/09/13 职场文书
村长反四风问题个人对照检查材料
2014/09/21 职场文书
2016年世界艾滋病日宣传活动总结
2016/04/01 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书