php 应用程序安全防范技术研究


Posted in PHP onSeptember 25, 2009

PHP安全防范程序模型

/* PHP防注入跨站V1.0 

在您的页面顶部添加: require(“menzhi_injection.php”); 

即可实现通用防止SQL注入,以及XSS跨站漏洞。 

##################缺陷以及改进################## 

程序还有很多缺陷,希望大家能帮助改进 

##################参考以及鸣谢################## 

Neeao'ASP SQL通用防注入程序 V3.0 

部分代码参考自Discuz! 

*/ 

error_reporting(0); 

define('MAGIC_QUOTES_GPC', get_magic_quotes_gpc()); 

$menzhi_injection="'|;|and|(|)|exec|insert|select|delete|update|count|*|%|chr|mid|master|truncate|or|char|declare"; 

$menzhi_injection = explode("|",$menzhi_injection); 

foreach(array('_GET', '_POST', '_COOKIE','_REQUEST') as $_request) { 

foreach($$_request as $_key => $_value) { 

//$_value = strtolower($_value); 

$_key{0} != '_' && $$_key = daddslashes($_value); 

foreach($menzhi_injection as $kill_key => $kill_value) { 

if(substr_count($_value,$kill_value)>0) { 

echo ""; 

unset($_value); 

exit(); 

} 

} 

//echo " 

".$_value; 

} 

} 

function daddslashes($string) { 

if(!MAGIC_QUOTES_GPC) { 

if(is_array($string)) { 

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

$string[$key] = daddslashes($val); 

} 

} else { 

$string = addslashes($string); 

} 

} 

$string = preg_replace('/&((#(\d{3,5}|x[a-fA-F0-9]{4}));)/', '&\\1',str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string)); 

return $string; 

} 

?>

使用说明

在您的页面顶部添加:“require(“menzhi_injection.php”);” , 即可实现通用防止SQL注入,以及XSS跨站漏洞。调用本程序,我们使用require() 而不使用include() ,因为require()调用文件如果出错,将终止程序运行,include()并不理会。并且require()调用文件时,程序一运行,会先调用外本文件。而inculde()则是运行到该行时才开始执行。基于函数特性,我们选择require()。 您还可以根据实际需要自行增加或者删除$menzhi_injection变量中的过滤字符,来达到更好的防御效果。 再者您可以自行修改代码,或许会有有意外收获。普通注射都可以防御,以下测试仅供调侃,下面是对一句话木马的测试效果:


php 应用程序安全防范技术研究

嘿嘿,动心了就在您的页面顶部调用吧。记住是“require(“menzhi_injection.php”);”哦。这只是提起大家兴趣的噱头,请自行测试吧。

缺陷以及待改进

由于此程序只是外部调用,只是处理了外部提交的变量,并没有对您的应用程序作系统分析,所以存在很多局限性,请谨慎使用。 对于使用GBK编码的程序,还存在双字节编码漏洞风险,本程序虽然可以处理该漏洞。但遏制这些漏洞,还是需要从根源做起。需要处理数据库连接文件,我们可以添加 character_set_client=binary 。Discuz!7.0的数据库连接类db_mysql.class.php写的就非常不错,大家可以参考借鉴。当然这些并不是这个小程序所能涉及到的范畴。

而且此程序并没有过滤 $_SERVER $_ENV $_FILES系统变量。比如对于$_SERVER['HTTP_X_FORWARDED_FOR']系统获取IP时,黑客可以通过劫持修改HTTP原始请求包来更改其值,本程序是可以处理这些漏洞。但是作为程序员我们需要的是从根源就对外部变量处理,防患于未然,未雨绸缪吧。

程序很潦草,欢迎大家测试使用,有什么意见建议直接联系我吧。

结束语

最后祝大家学习有成,工作顺利,向所有辛勤工作的PHPers致敬。

PHP 相关文章推荐
php学习之变量的使用
May 29 PHP
PHP取进制余数函数代码
Jan 19 PHP
PHP简洁函数(PHP简单明了函数语法)
Jun 10 PHP
php使用pdo连接并查询sql数据库的方法
Dec 24 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
php返回相对时间(如:20分钟前,3天前)的方法
Apr 14 PHP
php序列化函数serialize() 和 unserialize() 与原生函数对比
May 08 PHP
纯php生成随机密码
Oct 30 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 26 PHP
PHP实现简易图形计算器
Aug 28 PHP
从Web查询数据库之PHP与MySQL篇
Sep 25 #PHP
php 服务器调试 Zend Debugger 的安装教程
Sep 25 #PHP
php 代码优化的42条建议 推荐
Sep 25 #PHP
PHP下通过系统信号量加锁方式获取递增序列ID
Sep 25 #PHP
PHP 日常开发小技巧
Sep 23 #PHP
php程序之die调试法 快速解决错误
Sep 17 #PHP
火车采集器 免费版使出收费版本功能实现原理
Sep 17 #PHP
You might like
PHP XML备份Mysql数据库
2009/05/27 PHP
在命令行下运行PHP脚本[带参数]的方法
2010/01/22 PHP
php实现简单加入购物车功能
2017/03/07 PHP
PHP实现上传多图即时显示与即时删除的方法
2017/05/09 PHP
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
jQuery EasyUI Tab 选项卡问题小结
2016/08/16 Javascript
基于BootStrap与jQuery.validate实现表单提交校验功能
2016/12/22 Javascript
JS+html5制作简单音乐播放器
2020/09/13 Javascript
vue.js实现点击后动态添加class及删除同级class的实现代码
2018/04/04 Javascript
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
vue添加class样式实例讲解
2019/02/12 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
jQuery实现移动端笔触canvas电子签名
2020/05/21 jQuery
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
Python判断直线和矩形是否相交的方法
2015/07/14 Python
使用python实现knn算法
2017/12/20 Python
Python选择网卡发包及接收数据包
2019/04/04 Python
python使用Paramiko模块实现远程文件拷贝
2019/04/30 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
详解Python中的分支和循环结构
2020/02/11 Python
python GUI库图形界面开发之PyQt5 MDI(多文档窗口)QMidArea详细使用方法与实例
2020/03/05 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
HTML 5 input placeholder 属性如何完美兼任ie
2014/05/12 HTML / CSS
介绍一下Mysql的存储引擎
2015/02/12 面试题
电子邮箱格式怎么写
2014/01/12 职场文书
党支部公开承诺书
2014/03/28 职场文书
关于安全的标语
2014/06/10 职场文书
安全责任书范文
2014/08/25 职场文书
校园新闻广播稿5篇
2014/10/10 职场文书
考研复习计划
2015/01/19 职场文书
商场营业员岗位职责
2015/04/14 职场文书
企业法律事务工作总结
2015/08/11 职场文书
分析设计模式之模板方法Java实现
2021/06/23 Java/Android