关于PHP文件包含漏洞的一点想法

刚刚开始研究PHP,就PHP最常见的漏洞文件包含说一点个人的看法:

 

1.涉及的函数include、require、include_once、require_once

 

它们的用法这里不再详细叙述,当然最可能被利用的就是include。这就要提高include函数的执行方式了,include函数在包含一个文件后,如果发生错误则会继续执行,而require则在发生错误之后就会停止执行。从而使得物理路径泄露,也许你会认为物理路径泄露了实在是没有什么大不了的,但是就是这么一个信息,有时足可以造成致命安全问题。好了,继续包含漏洞。如果把包含漏洞浓缩为最简单的句子,那么最好是如下:

          $a = $_GET["id"];

          include("$a");

黑客只要构造一条特殊的URL地址,将$a后面跟上需要执行的代码,就能够得到一个网站的Webshell。

 

2.本质

 

本质就是对包含函数的过滤不严格。其实这是在PHP漏洞中最简单也是最常见的漏洞。因为简单,所以也最容易出现问题,甚至超过了数据库注入。其本质是因为PHP的包含函数实在太好了,随便一个包含,省了几十行代码,在构建高性能Web网站的今天,包含函数的受欢迎程度自然水涨船高。

 

3.解决方法

 

对包含函数进行统一处理。尤其在大型项目开发中,包含函数不可避免的被调用,那么我们需要有一个统一的方法来对其进行处理(即对包含函数进行严格过滤)。第一、使用判断,将错误信息完善处理,使得浏览者得不到包含文件的详细信息(注:这里有本地包含和远程包含,大家可以到Google搜索下针对远程文件包含的解决方法);第二、为包含文件的后面加一个扩展名,即:include("$a"".txt"),这样会在变量a的后面加上一个txt。

 

后记:针对php语言的学习刚刚开始,有不对的地方还请多多指正。

你可能感兴趣的:(PHP)