PHP程序的常见漏洞攻击分析

本文深入分析了PHP程序中的常见安全漏洞,包括全局变量、远程文件、文件上载、库文件和Session文件等方面的攻击。指出PHP的全局变量易受攻击,远程文件包含可能导致敏感信息泄露,文件上载可被利用执行恶意代码,库文件的不恰当使用可暴露源代码,Session文件可能被篡改。建议通过禁用全局变量、限制远程文件操作、加强文件上传检查和管理Session文件等方式提升PHP程序的安全性。
摘要由CSDN通过智能技术生成

PHP程序的常见漏洞攻击分析

不是固若金汤,随着PHP的广泛运用,一些黑客们也在无时不想找PHP的麻烦,通过PHP程序漏洞进行攻击就是其中一种。在节,我们将从全局变量,远程文件,文件上载,库文件,Session文件,数据类型和容易出错的函数这几个方面分析了PHP的安全性。

如何通过全局变量进行攻击?

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

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

例如:
PHP代码

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

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

下面的用户认证代码暴露了PHP的全局变量所导致的安全问题:
PHP代码

   1. <?php  
   2. if ($pass == "hello")  
   3. $auth = 1;  
   4. ...  
   5. if ($auth == 1)  
   6. echo "some important information";  
   7. ?>   

上面的代码首先检查用户的密码是否为"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. <?php  
   2. if (!($fd = fopen("$filename", "r"))  
   3.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凉水沏茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值