文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | firefox | WPS | 杀毒软件 | Picasa
清风网络
首 页 软件下载 网络学院 数码学院
QQ 电脑入门 游戏 操作系统 图形图像 办公软件 媒体动画 精文荟萃 常用软件 网页编程 技术开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络学院网络编程PHP对PHP程序中的常见漏洞进行攻击
精品推荐
特别推荐
·菜鸟学PHP之Smarty入门
·PHP环境安全配置教程
·PHP入门指导:如何学习PHP?
·Php+Mysql注入专题
·PHP:实现给上传图片加水印的程序代码
·PHP动态网站开发中常用的8个小技巧
·PHP初学者:配置Apache服务器并且设置DNS
·初学PHP指导:php.ini 配置详细选项
·好文分享:PHP入门的学习方法
·急速搭建属于自己的Discuz!6论坛
·PHP入门:初学来看配置文件PHP.INI的中文注释
·php.ini配置,php.ini 中的 php-5.2.0 配置指令详解
·总结:一些PHP学习过程中的心得和经验
·新手入门:JSP初学者必须掌握的语法点
·PHP技巧:PHP脚本编程中的文件系统函数库
·详细讲解PHP编程中分页显示的制作
·成为PHP编程高手应该遵循的三个准则
·谈谈生成静态页面的一些经验
·新手入门:详细解述七个软件开发的原则
·简单的webservice开发例子
热点TOP10
·一个Struts实现分页,增删改查,Tiles,国际化的DEMO
·MyEclipse+struts+Hibernate配置开发
·Windows XP下PHP+MySQL环境搭建
·PHP预定义变量
·简单的webservice开发例子
·80004005 及其它错误消息的疑难解答
·模板用xml的思路
·用PHP实现多级树型菜单
·如何利用PHP和CSS改变网页文字大小
·PHP+MYSQL留言本
·PHP+Access设计留言版实战
·初学者学习PHP开发应该掌握的几段精华代码
·JDBC连接Oracle数据库常见问题及解决方法
·PHP入门指导:如何学习PHP?
·实用:动态网页制作技术PHP的十个应用技巧
·菜鸟学PHP之Smarty入门
·PHP 会话 (Session) 使用入门
·Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
·优化NFR之一 --MSSQL Hello Buffer Overflow
·Win2000下PHP服务器安装攻略

对PHP程序中的常见漏洞进行攻击

日期:2008年3月20日 作者: 查看:[大字体 中字体 小字体]


  之所以翻译这篇文章,是因为目前关于CGI安全性的文章都是拿Perl作为例子,而专门介绍ASPPHP或者jsp安全性的文章则很少。Shaun Clowes的这篇文章比较全面地介绍了PHP的安全问题,原文可以在http://www.securereality.com.au/studyinscarlet.txt找到。 

  由于原文比较长,而且有相当一部分是介绍文章的背景或PHP的基础知识,没有涉及到PHP安全方面的内容,因此我没有翻译。如果你想了解这方面的知识,请参考原文。

  文章主要从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错的函数这几个方面分析了PHP的安全性,并且对如何增强PHP的安全性提出了一些有用的建议。

  好了,废话少说,我们言归正传!

  [全局变量] 
  PHP中的变量不需要事先声明,它们会在第一次使用时自动创建,它们的类型也不需要指定,它们会根据上下文环境自动确定。从程序员的角度来看,这无疑是一种极其方便的处理方法。很显然,这也是快速开发语言的一个很有用的特点。一旦一个变量被创建了,就可以在程序中的任何地方使用。这个特点导致的结果就是程序员很少初始化变量,毕竟,当它们第一次创建时,他们是空的。

  很显然,基于PHP的应用程序的主函数一般都是接受用户的输入(主要是表单变量,上载文件和Cookie等),然后对输入数据进行处理,然后把结果返回到客户端浏览器。为了使PHP代码访问用户的输入尽可能容易,实际上PHP是把这些输入数据看作全局变量来处理的。

  例如:

  <FORM METHOD="GET" ACTION="test.php"> 
  <INPUT TYPE="TEXT" NAME="hello"> 
  <INPUT TYPE="SUBMIT"> 
  </FORM>

  很显然,这会显示一个文本框和提交按钮。当用户点击提交按钮时,“test.php”会处理用户的输入,当“test.php”运行时,“$hello”会包含用户在文本框输入的数据。从这里我们应该看出,攻击者可以按照自己的意愿创建任意的全局变量。如果攻击者不是通过表单输入来调用“test.php”,而是直接在浏览器地址栏输入http://server/test.php?hello=hi&setup=no,那么,不止是“$hello”被创建,“$setup”也被创建了。

  译者注:这两种方法也就是我们通常说的“POST”和“GET”方法。 
  下面的用户认证代码暴露了PHP的全局变量所导致的安全问题:

  <?php 
    if ($pass == "hello") 
      $auth = 1; 
    ... 
    if ($auth == 1) 
  echo "some important information"; 
  ?>

  上面的代码首先检查用户的密码是否为“hello”,如果匹配的话,设置“$auth”为“1”,即通过认证。之后如果“$suth”为“1”的话,就会显示一些重要信息。

  表面看起来是正确的,而且我们中有相当一部分人是这样做的,但是这段代码犯了想当然的错误,它假定“$auth”在没有设置值的时候是空的,却没有想到攻击者可以创建任何全局变量并赋值,通过类似“http://server/test.php?auth=1”的方法,我们完全可以欺骗这段代码,使它相信我们是已经认证过的。

  因此,为了提高PHP程序的安全性,我们不能相信任何没有明确定义的变量。如果程序中的变量很多的话,这可是一项非常艰巨的任务。

  一种常用的保护方式就是检查数组HTTP_GET[]或POST_VARS[]中的变量,这依赖于我们的提交方式(GET或POST)。当PHP配置为打开“track_vars”选项的话(这是缺省值),用户提交的变量就可以在全局变量和上面提到的数组中获得。

  但是值得说明的是,PHP有四个不同的数组变量用来处理用户的输入。HTTP_GET_VARS数组用来处理GET方式提交的变量,HTTP_POST_VARS数组用于处理POST方式提交的变量,HTTP_COOKIE_VARS数组用于处理作为cookie头提交的变量,而对于HTTP_POST_FILES数组(比较新的PHP才提供),则完全是用户用来提交变量的一种可选方式。用户的一个请求可以很容易的把变量存在这四个数组中,因此一个安全的PHP程序应该检查这四个数组。

  [远程文件] 
  PHP是一种具有丰富特性的语言,提供了大量的函数,使编程者实现某个功能很容易。但是从安全的角度来看,功能越多,要保证它的安全性就越难,远程文件就是说明这个问题的一个很好的例子:

  <?php 

[1] [2] [3] [4] [5] 下一页 




上一篇:PHP连接MYSQL的两种方法

下一篇:IIS 6 的 PHP 最佳配置方法

对PHP程序中的常见漏洞进行攻击 相关文章:
·全程攻击无线网络WEP加密(二)
·全程攻击无线网络WEP加密(一)
·各种病毒分析及攻击防御手册
·不怕被攻击 Windows系统防黑技巧七招
·黑客攻击与防守
·Windows系统用户摆脱黑客攻击的方法
·避免恶意攻击行为 网络服务器安全维护技巧
·IIS攻击与日志
·多种DDoS攻击技术方法
·[推荐]远程登录攻击
对PHP程序中的常见漏洞进行攻击 相关软件:
·手机炸弹-短信息攻击懒人版
·NTFS数据流攻击教程
·嵌入式木马攻击
·手机短信息攻击程序V1.0
·黑客的攻击手段及用户对策
·盗帅v2.1-SP1攻击程序使用简介
·懒人短消息攻击器
·网页攻击的另类利用
·黑客的攻击手段及用户对策 +PDG绿色迷你阅读器
·SQL注入法攻击

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:vipcn