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

定义和用法

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

返回的数组元素如下:

[dirname]:返回文件路径中的目录部分

[basename]:返回文件路径中文件名的部分

[extension]:返回文件路径中文件的类型的部分

语法

pathinfo(path,options)

参数

path: 必需。规定要检查的路径。

options 可选。规定要返回的数组元素。默认是 all。

可能的值:

PATHINFO_DIRNAME - 只返回 dirname

PATHINFO_BASENAME - 只返回 basename

PATHINFO_EXTENSION - 只返回 extension

提示和注释

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

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

cgi.fix_pathinfo=1

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

实例 1

print_r(pathinfo("/testweb/test.txt"));

?>

上面的代码将输出:

Array

(

[dirname] => /testweb

[basename] => test.txt

[extension] => txt

)

实例 2

var_dump(pathinfo("/testweb/test.txt",PATHINFO_DIRNAME));

var_dump(pathinfo("/testweb/test.txt",PATHINFO_BASENAME));

var_dump(pathinfo("/testweb/test.txt",PATHINFO_EXTENSION));

?>

上面的代码将输出:

string(8)"/testweb"

string(8)"test.txt"

string(3)"txt"

应用

目录不可控没有执行权限

e5e678b1ecac8cafa4c9f67197749218.png

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

a2056002c7d1920aa65772c134200347.png

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

fdeeb8894361f09c95aaa022a0865b85.png

一句话就执行了。

过 WAF 注入

本地安装 apache 安全狗

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

ee9a35a3d9039800c3af5674cc614da6.png

常用注入语句被拦截

7832f701770a9f88a0c61dba9c209157.png

pathinfo 模式不拦截

a373c82e0c32783799d42b165bb2a946.png

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值