详解PHP中pathinfo()函数导致的安全问题

定义和用法

pathinfo() 函数以数组或字符串的形式返回关于文件路径的信息。

返回的数组元素如下:

  1. [dirname]:返回文件路径中的目录部分
  2. [basename]:返回文件路径中文件名的部分
  3. [extension]:返回文件路径中文件的类型的部分

语法

pathinfo(path,options)

参数

  1. path: 必需。规定要检查的路径。
  2. options 可选。规定要返回的数组元素。认是 all。

可能的值:

  1. PATHINFO_DIRNAME - 只返回 dirname
  2. PATHINFO_BASENAME - 只返回 basename
  3. PATHINFO_EXTENSION - 只返回 extension

提示和注释

注释:如果不是请求所有的元素,则 pathinfo() 函数返回字符串。

PHP开启pathinfo 路由模式:pathinfo 模式 需要 PHP.ini 开启下面这个参数

cgi.fix_pathinfo=1

path_info模式:http://www.xxx.com/index.PHP/模块/方法

实例 1

rush:PHP;">

上面的代码输出

/testweb [basename] => test.txt [extension] => txt )

实例 2

rush:PHP;">

上面的代码输出

rush:PHP;"> string(8)"/testweb" string(8)"test.txt" string(3)"txt"

应用

目录不可控没有执行权限

pathinfo,一种伪静态的用法,path_info 模式:http://www.xxx.com/index.PHP / 模块 / 方法

sb.txt 被当成了模块,实际上请求的还是 6.PHP

一句话就执行了。

过 WAF 注入

本地安装 apache 安全狗

已知在开启 pathinfo 的情况下 (认开启) 可以这样访问

常用注入语句被拦截

pathinfo 模式不拦截

总结

以上就是这篇文章的全部内容了,本文也算是抛砖引玉,更多用途请自测!希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...