【文件包含漏洞】——文件包含漏洞防御

文章目录

    • 一、实验目的:
    • 二、实验环境:
    • 三、防御说明:
    • 四、防御措施:
      • 1. 设置白名单:
      • 2. 过滤危险字符:
      • 3. 设置文件目录(配置php.ini):
      • 4. 关闭危险配置(配置php.ini):
    • 五、防御总结:

一、实验目的:

1、通过本次学习,掌握文件包含的过滤验证方式。
2、学习在修复文件包含漏洞的方法。

二、实验环境:

靶 机: windows10虚拟机:192.168.100.150
      phpstudy2018_Apache集成环境

三、防御说明:

文件包含漏洞防御:
  在PHP开发中文件包含漏洞常出现在Incbude/Require系列语言结构上,由于需要包含的文件是可以被用户设置的,从而导致包含任意文件及代码执行。通常在开发中需要设置白名单过滤危险字符设置文件目录关闭危险配置等操作来避免漏洞的发生。

四、防御措施:

1. 设置白名单:

代码在进行文件包含时,如果文件名可以确定,可以设置白名单对传入的参数进行比较。

验证源码示例:


$file_list=[                       //声明一个变量,用于存放白名单;
  'framework/init.php',
  'framework/route.php',
  'framework/event.php',
];
$file= $_REQUEST['file'];          //声明一个变量,用于接收传递过来的文件信息;
if (in_array($file, $file_list)){  //把传递过来的文件信息和白名单里面的文件进行对比;
  include "$file";                 //如果传递过来的文件是白名单里面的文件,就对它进行文件包含;
}
?>

2. 过滤危险字符:

  由于Incbude/Require可以对PHP Wrapper形式的地址进行包含执行(需要配置php.ini), 在Linux环境中可以通过"../../"的形式进行目录绕过,所以需要判断文件名称是否为合法的PHP文件。

验证源码示例:

$pattern= "#^[a-z][a-z0-9+.]*:?//#i";
if(substr($filename,-4)=='.php' && strpos($filename,"..")===false&&!preg_match($pattern, $filename)){
include "$file";
}

3. 设置文件目录(配置php.ini):

  PHP配置文件中有open_basedir选项可以设置用户需要执行的文件目录,如果设置目录的话,PHP仅仅在该目录内搜索文件。

【文件包含漏洞】——文件包含漏洞防御_第1张图片

4. 关闭危险配置(配置php.ini):

  PHP配置中的allow_url_include选项如果打开,PHP会通过Include/Require进行远程文件包含,由于远程文件的不可信任性及不确定性,在开发中禁止打开此选项,PHP默认是关闭的

【文件包含漏洞】——文件包含漏洞防御_第2张图片

五、防御总结:

  任意文件包含漏洞的主要出现在能够解析处理脚本文件的函数上,没有对输入的变量进行过滤,导致任意文件包含,进而导致恶意代码执行。在开发处理这类功能函数上,一定要遵循编程规范; 在代码核心处,对变量进行过滤限制, 设置文件路径或者白名单,避免执行任意文件包含。
  最后,总结一下任意文件包含漏洞的防御方式。任意文件包含漏洞的主要出现在能够解析处理脚本文件的函数上,没有对输入的变量进行过滤,导致任意文件包含,进而导致恶意代码执行。在开发处理这类功能函数上,一定要遵循编程规范:在代码核心处,对变量进行过滤限制,设置文件路径或者白名单,避免执行任意文件包含。

你可能感兴趣的:(渗透测试,文件包含漏洞,网络安全,web安全,渗透测试,文件包含防御)