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


Posted in Javascript onJanuary 05, 2017

定义和用法

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

<?php
print_r(pathinfo("/testweb/test.txt"));
?>

上面的代码将输出:

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

实例 2

<?php
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"

应用

目录不可控没有执行权限

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

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

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

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

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

一句话就执行了。

过 WAF 注入

本地安装 apache 安全狗

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

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

常用注入语句被拦截

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

pathinfo 模式不拦截

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

总结

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

Javascript 相关文章推荐
文本框的字数限制功能jquery插件
Nov 24 Javascript
javascript实现可改变滚动方向的无缝滚动实例
Jun 17 Javascript
js实现图片和链接文字同步切换特效的方法
Feb 20 Javascript
jQuery获取单击节点对象的方法
Jun 02 Javascript
bootstrap的3级菜单样式,支持母版页保留打开状态实现方法
Nov 10 Javascript
微信小程序实现跳转的几种方式总结(推荐)
Apr 24 Javascript
使用localStorage替代cookie做本地存储
Sep 25 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
Mar 04 Javascript
原生js实现五子棋游戏
May 28 Javascript
JavaScrip如果基于url实现图片下载
Jul 03 Javascript
Element Breadcrumb 面包屑的使用方法
Jul 26 Javascript
前端 javascript 实现文件下载的示例
Nov 24 Javascript
jQuery电话号码验证实例
Jan 05 #Javascript
纯原生js实现table表格的增删
Jan 05 #Javascript
微信小程序 tabs选项卡效果的实现
Jan 05 #Javascript
jQuery密码强度验证控件使用详解
Jan 05 #Javascript
jquery广告无缝轮播实例
Jan 05 #Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
Jan 05 #Javascript
javascript添加前置0(补零)的几种方法
Jan 05 #Javascript
You might like
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
2011/05/02 PHP
php 定界符格式引起的错误
2011/05/24 PHP
注册页面之前先验证用户名是否存在的php代码
2012/07/14 PHP
memcache一致性hash的php实现方法
2015/03/05 PHP
CI框架常用方法小结
2016/05/17 PHP
XHProf报告字段含义的解析
2016/05/17 PHP
php 基础函数
2017/02/10 PHP
下载网站打开页面后间隔多少时间才显示下载链接地址的代码
2010/04/25 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
2010/04/27 Javascript
ExtJs grid行 右键菜单的两种方法
2010/06/19 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
使用javascript创建快捷方式的简单实例
2013/08/09 Javascript
js控制浏览器全屏示例代码
2014/02/20 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
javascript常用经典算法实例详解
2015/11/25 Javascript
jQuery基本选择器和层次选择器学习使用
2017/02/27 Javascript
深入理解vue.js中$watch的oldvalue与newValue
2017/08/07 Javascript
Node.js实现mysql连接池使用事务自动回收连接的方法示例
2018/02/03 Javascript
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
bootstrap table实现合并单元格效果
2018/12/24 Javascript
Nodejs核心模块之net和http的使用详解
2019/04/02 NodeJs
详解vue beforeEach 死循环问题解决方法
2020/02/25 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
原生JS实现记忆翻牌游戏
2020/07/31 Javascript
基于vue中的scoped坑点解说
2020/09/04 Javascript
[01:03:27]Optic vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
详解Swift中属性的声明与作用
2016/06/30 Python
python检测空间储存剩余大小和指定文件夹内存占用的实例
2018/06/11 Python
Python判断两个文件是否相同与两个文本进行相同项筛选的方法
2019/03/01 Python
Python脚本调试工具安装过程
2021/01/11 Python
运动会广播稿300字
2014/01/10 职场文书
生物技术专业求职信
2014/06/10 职场文书
团队会宣传标语
2014/10/09 职场文书
我们的节日元宵节活动总结
2015/02/06 职场文书