php 应用程序安全防范技术研究_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致敬。

时间: 2025-01-21 01:36:13

php 应用程序安全防范技术研究_php技巧的相关文章

PHP 程序员的调试技术小结_php技巧

本文介绍调试 PHP 应用程序的各种方法,包括在 Apache and PHP 中打开错误报告,以及通过在一个简单的 PHP 脚本中放置策略性的 print 语句,找到更困难的 bug 的源头.还会介绍用于 Eclipse 的 PHPEclipse 插件,这是一个灵活的开发环境,具有实时语法解析能力,还会介绍 PHPEclipse 的 DBG 调试器扩展. 简介 有许多 PHP 调试技术可以在编码的时候节约大量时间.一个有效却很基本的调试技术就是打开错误报告.另一个略微高级一点的技术包括使用 p

PowerBuilder 8.0应用程序编译发布技术研究

执行文件的建立 1.编译格式的选择 PowerBuilder 8.0对生成可执行文件提供了两种编译格式:伪代码(Pcode,即pseudocode的缩写)和机器代码(Machinecode).伪代码是一种在所有PowerBuilder 平台上支持的解释性语言,它的格式与PowerBuilder 运行库(.pbl)一样,在可执行状态下保存单个对象,其优点是方便和可移植:机器代码则是真正的完全脱离PowerBuilder 环境的可执行文件,其优点是速度快,但文件容量比较大.选择编译代码格式一般基于以

PHP SOCKET 技术研究_php基础

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

PHP程序漏洞产生的原因分析与防范方法说明_php技巧

滥用include 1.漏洞原因: Include是编写PHP网站中最常用的函数,并且支持相对路径.有很多PHP脚本直接把某输入变量作为Include的参数,造成任意引用脚本.绝对路径泄露等漏洞.看以下代码: ... $includepage=$_GET["includepage"]; include($includepage); ... 很明显,我们只需要提交不同的Includepage变量就可以获得想要的页面.如果提交一个不存在的页面,就可以使PHP脚本发生错误而泄露实际绝对路径(

php缓存技术介绍_php技巧

缓存是指临时文件交换区,电脑把最常用的文件从存储器里提出来临时放在缓存里,就像把工具和材料搬上工作台一样,这样会比用时现去仓库取更方便.因为缓存往往使用的是RAM(断电即掉的非永久储存),所以在忙完后还是会把文件送到硬盘等存储器里永久存储.电脑里最大的缓存就是内存条了,最快的是CPU上镶的L1和L2缓存,显卡的显存是给GPU用的缓存,硬盘上也有16M或者32M的缓存.千万不能把缓存理解成一个东西,它是一种处理方式的统称! 在WEB开发中用来应付高流量最有效的办法就是用缓存技术,能有效的提高服务器

PHP程序员编程注意事项_php技巧

1.不转意html entities   一个基本的常识:所有不可信任的输入(特别是用户从form中提交的数据) ,输出之前都要转意. echo $_GET['usename'] ; 这个例子有可能输出: <script>/*更改admin密码的脚本或设置cookie的脚本*/</script> 这是一个明显的安全隐患,除非你保证你的用户都正确的输入. 如何修复 : 我们需要将"< ",">","and" 等转

PHP高级OOP技术演示_php技巧

序列化(Serializing) PHP不支持永久对象,在OOP中永久对象是可以在多个应用的引用中保持状态和功能的对象,这意味着拥有将对象保存到一个文件或数据库中的能力,而 且可以在以后装入对象.这就是所谓的序列化机制.PHP 拥有序列化方法,它可以通过对象进行调用,序列化方法可以返回对象的字符串表示.然而,序列化只保存了对象的成员数据而不包话方法. 在 PHP4中,如果你将对象序列化到字符串$s中,然后释放对象,接着反序列化对象 到$obj,你可以继续使用对象的方法!我不建议这样去做,因为(a

调试PHP程序的多种方法介绍_php技巧

调试的定义:通过一定方法,在程序中找到并减少缺陷的数量,从而使其能正常工作. 这里说一些如何调试PHP程序的经验. 一.PHP自带的调试功能 1.自带的报错功能 两个名词:开发环境是开发人员在进行开发和调试的环境,生产环境是最终客户在用的线上环境: 开发环境和生产环境要分开设置报错功能. (1)开发环境 开发环境需要打开报错,以下是php.ini的配置项及其说明: 复制代码 代码如下: ; This directive sets the error reporting level. ; Deve

php调用自己java程序的方法详解_php技巧

本文实例讲述了php调用自己的java程序实现方法.分享给大家供大家参考,具体如下: 最开始要装jdk这个就不用说了,我装的是java ee 5+jdk 1.把下载的php-java-bridge_5.2.2_j2ee.zip解压出来,里面有个JavaBridge.war 直接用winrar打开,到WEB-INF/lib/JavaBridge.jar 把这个jar包拷到 你的php目录的ext/下. 2.打开war包,里面有个java的文件夹,把他全部拷到你的PHP项目下,如/demo/java