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 相关文章推荐
一个好用的分页函数
Nov 16 PHP
简单示例AJAX结合PHP代码实现登录效果代码
Jul 25 PHP
PHP 数据结构 算法 三元组 Triplet
Jul 02 PHP
PHP内核介绍及扩展开发指南―基础知识
Sep 11 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
PHP判断指定时间段的2个方法
Mar 14 PHP
php实现根据IP地址获取其所在省市的方法
Apr 30 PHP
在WordPress中使用wp_count_posts函数来统计文章数量
Jan 05 PHP
PHP仿微信多图片预览上传实例代码
Sep 13 PHP
微信 开发生成带参数的二维码的实例
Nov 23 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
YII框架常用技巧总结
Apr 27 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缩小png图片不损失透明色的解决方法
2013/12/25 PHP
php防止sql注入之过滤分页参数实例
2014/11/03 PHP
php curl 上传文件代码实例
2015/04/27 PHP
PHP中两个float(浮点数)比较实例分析
2015/09/27 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
jQuery源码分析-03构造jQuery对象-工具函数
2011/11/14 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
js canvas实现擦除效果示例代码
2017/04/26 Javascript
利用vue重构有赞商城的思路以及总结整理
2019/02/21 Javascript
js比较两个单独的数组或对象是否相等的实例代码
2019/04/28 Javascript
fastadmin中调用js的方法
2019/05/14 Javascript
p5.js实现动态图形临摹
2019/10/23 Javascript
有趣的JavaScript隐式类型转换操作实例分析
2020/05/02 Javascript
JavaScript实现复选框全选和取消全选
2020/11/20 Javascript
10分钟学会js处理json的常用方法
2020/12/06 Javascript
[00:57]深扒TI7聊天轮盘语音出处5
2017/05/11 DOTA
[41:12]Liquid vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.24
2019/09/10 DOTA
python支持断点续传的多线程下载示例
2014/01/16 Python
状态机的概念和在Python下使用状态机的教程
2015/04/11 Python
python爬虫入门教程--利用requests构建知乎API(三)
2017/05/25 Python
Python编程使用NLTK进行自然语言处理详解
2017/11/16 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
2019/01/19 Python
详解python3 + Scrapy爬虫学习之创建项目
2019/04/12 Python
python3 写一个WAV音频文件播放器的代码
2019/09/27 Python
python实现滑雪游戏
2020/02/22 Python
Pytorch中的自动求梯度机制和Variable类实例
2020/02/29 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
python中return不返回值的问题解析
2020/07/22 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
PyCharm常用配置和常用插件(小结)
2021/02/06 Python
Manuka Doctor美国官网:麦卢卡蜂蜜和蜂毒护肤
2016/12/25 全球购物
生产部岗位职责范文
2014/02/07 职场文书
广告语设计及教案
2014/03/21 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
Pyqt5将多个类组合在一个界面显示的完整示例
2021/09/04 Python