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变量中的过滤字符,来达到更好的防御效果。 再者您可以自行修改代码,或许会有有意外收获。普通注射都可以防御,以下测试仅供调侃,下面是对一句话木马的测试效果:  

  嘿嘿,动心了就在您的页面顶部调用吧。记住是“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致敬。

(0)

相关推荐

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

    PHP安全防范程序模型 复制代码 代码如下: /* PHP防注入跨站V1.0 在您的页面顶部添加: require("menzhi_injection.php"); 即可实现通用防止SQL注入,以及XSS跨站漏洞. ##################缺陷以及改进################## 程序还有很多缺陷,希望大家能帮助改进 ##################参考以及鸣谢################## Neeao'ASP SQL通用防注入程序 V3.0 部分代码参考

  • PHP程序员的技术成长规划

    按照了解的很多PHP/LNMP程序员的发展轨迹,结合个人经验体会,抽象出很多程序员对未来的迷漫,特别对技术学习的盲目和慌乱,简单梳理了这个每个阶段PHP程序员的技术要求,来帮助很多PHP程序做对照设定学习成长目标. 本文按照目前主流技术做了一个基本的梳理,整个是假设PHP程序员不是基础非常扎实的情况进行的设定,并且所有设定都非常具体明确清晰,可能会让人觉得不适,请理解仅代表一家之言.(未来技术变化不在讨论范围) 第一阶段:基础阶段(基础PHP程序员) 重点:把LNMP搞熟练(核心是安装配置基本操

  • 使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)

    全国抗"疫"这么久终于见到曙光,在家待了将近一个月,现在终于可以去上班了,可是却发现出门必备的口罩却一直买不到.最近看到京东上每天都会有口罩的秒杀活动,试了几次却怎么也抢不到,到了抢购的时间,浏览器的页面根本就刷新不出来,等刷出来秒杀也结束了.现在每天只放出一万个,却有几百万人在抢,很想知道别人是怎么抢到的,于是就在网上找了大神公开出来的抢购代码.看了下代码并不复杂,现在我们就报着学习的态度一起看看. 使用模块 requests:类似 urllib,主要用于向网站发送 HTTP 请求.

  • 远程终端3389管理及安全防范技术

    远程终端服务是微软Windows Server系列中的一大特色,由于其简洁.维护及使用方便等特点深受广大用户及其黑客的喜爱,而远程终端服务往往运行在一些有重要程序的服务器上;如果由于远程终端服务的配置和管理不当,往往会带来巨大的经济损失. 一. 远程终端服务技术介绍 Windows 2003 Server中的Windows Terminal Services(WTS)又称为远程终端服务(Remote Terminal Services)或者俗称为3389,是在Windows NT中最先使用的一种

  • 历代木马程序隐身的技术分析第1/2页

    最基本的隐藏:不可见窗体+隐藏文件 木马程序无论如何神秘,但归根究底,仍是Win32平台下的一种程序.Windows下常见的程序有两种: 1.Win32应用程序(Win32 Application),比如QQ.Office等都属于此行列. 2.Win32控制台程序(Win32 Console),比如硬盘引导修复程序FixMBR. 其中,Win32应用程序通常会有应用程序界面,比如系统中自带的"计算器"就有提供各种数字按钮的应用程序界面.木马虽然属于Win32应用程序,但其一般不包含窗体

  • 如何突破PHP程序员的技术瓶颈分析

    先明确我所指的PHP工程题,是指毕业工作后,主要以PHP进行WEB系统的开发,没有使用其的语言工作过.工作经验大概在3~4年,普通的WEB系统(百万级访问,千成级数据以内或业务逻辑不是特别复杂)开发起基本得心应手,没有什么问题.但他们会这样的物点: 除了PHP不使用其它的语言,可能会点shell 脚本. 对PHP的掌握不精(很多PHP手册都没有看完,库除外) 知识面比较窄(面对需求,除开使用PHP和mysql ,不知道其它的解决办法) PHP代码以过程为主,认为面向对象的实现太绕,看不懂 这些P

  • PHP SOCKET 技术研究

    今天试着写一个 PHP 与 C 语言通过socket通讯的程序,看过PHP手册,发现有好几种方式可以建立socket 客户端. 1.通过 fsockopen() 建立socket连接,然后用 用fputs() 发送消息,用 fgets() 接收消息. 2.通过 socket_create() 建立 socket 连接,然后用 socket_send() or socket_write() 发送消息,用 socket_recv() or socket_read() 发送消息. 很奇怪,我在手册上看

  • 图片翻转菜单技术研究

    Fastcompany是simplebits.com站长的全CSS+Div布局作品. 网站导航采用的是CSS图片翻转.不用多想肯定是利用a:link和a:hover等不同状态下利用显示不同的background-images制作而成.我认为作者的独到之处在于CSS中的a:hover... #nav a:hover {background-position: 0 -20px;}#nav a:active {background-position: 0 -40px;} 导航的背景图片在a:link和

  • Mysql提权方法利用

    mysql是一个常用的数据库系统,应用极广泛,如果得到一个mysql的用户权限,如果提升呢,下面这个思路很先进! 但得有一定编程基础! 现在网上通过mysql获得系统权限大都通过MYSQL的用户函数接口UDF,比如Mix.dll和my_udf.dll.在Mix.dll中有一个MixConnect函数它会反弹shell,但是使用这个函数会造成MYSQL假死,前些天我就用这个函数反弹shell后由于网络原因不一会儿就断开了,造成了MYSQL当掉.my_udf.dll和Mix.dll相似,但它是通

  • 详解静态分析技术符号执行

    1. 引言 程序静态分析(Program Static Analysis)是指在不运行代码的方式下,通过词法分析.语法分析.控制流.数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性.安全性.可靠性.可维护性等指标的一种代码分析技术[8]. 程序静态分析的历史几乎与程序的历史一样长, 自从有了程序就有了程序分析.特别是随着编译技术的发展,大大带动了程序的自动分析技术.目前静态分析技术向模拟执行的技术发展以能够发现更多传统意义上动态测试才能发现的缺陷,例如符号执行.抽象解释.值依赖分析等等

随机推荐