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

2015-01-24信息快讯网

比特网专家特稿:关于PHP应用程序的安全,我们往往容易疏忽,或者采取的措施并不得当。这里给大家提供个通用防注射防跨站的小程序,仅供大家参考。

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中利用post传递字符串重定向的实现代码
php将fileterms函数返回的结果变成可读的形式
php压缩多个CSS为一个css的代码并缓存
flash用php连接数据库的代码
php中用数组的方法设置cookies
使用NetBeans + Xdebug调试PHP程序的方法
PHP的SQL注入实现(测试代码安全不错)
php通用防注入程序 推荐
理解php Hash函数,增强密码安全
重新封装zend_soap实现http连接安全认证的php代码
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
IP攻击升级,程序改进以对付新的攻击
PHP程序员最常犯的11个MySQL错误小结
PHP安全技术之 实现php基本安全
PHP开发需要注意的安全问题
PHP中开发XML应用程序之基础篇 添加节点 删除节点 查询节点 查询节
php 不同编码下的字符串长度区分
从Web查询数据库之PHP与MySQL篇
php 服务器调试 Zend Debugger 的安装教程
php 代码优化的42条建议 推荐
PHP下通过系统信号量加锁方式获取递增序列ID
PHP 日常开发小技巧
php程序之die调试法 快速解决错误
PHPLog php 程序调试追踪工具
不要轻信 PHP_SELF的安全问题
php 文件夹删除、php清除缓存程序
一些 PHP 管理系统程序中的后门
PHP 程序授权验证开发思路
脚本安全的本质_PHP+MYSQL第1/3页
FleaPHP的安全设置方法
php多数据库支持的应用程序设计第1/2页
新安装的MySQL数据库需要注意的安全知识
php sprintf()函数让你的sql操作更安全
©2014-2024 dbsqp.com