返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >PHP文件上传中fileinfo出现的安全问题
  • 226
分享到

PHP文件上传中fileinfo出现的安全问题

php安全服务器 2023-09-14 06:09:45 226人浏览 泡泡鱼
摘要

什么是fileinfo fileinfo的函数通过在文件的给定位置查找特定的魔术字节序列 来猜测文件的内容类型以及编码,也就是说我们可以获得上传文件的MIME信息 在windows中我们可以在PHP.

什么是fileinfo

fileinfo的函数通过在文件的给定位置查找特定的魔术字节序列 来猜测文件的内容类型以及编码,也就是说我们可以获得上传文件的MIME信息

windows中我们可以在PHP.ini中开启
在这里插入图片描述

extension=fileinfo

linux中开启fileinfo

找到fileinfo的路径执行命令:find / -name fileinfo,查询到fileinfo所在目录执行phpsize命令执行命令:/usr/local/php/bin/phpize执行configure配置执行命令:./configure --with-php-config=/usr/local/php/bin/php-config注意:如果提示php-config命令不存在,则需要先安装php-devel,执行命令:yum install php-devel。编译安装命令:make && make install修改php.ini文件在php.ini文件中添加extension=fileinfo.so

在打开fileinfo后我们就可以使用fileinfo扩展了
那fileinfo包括哪些呢
在这里插入图片描述
像如图红圈中的那些都是fileinfo扩展。

fileinfo预定义常量

常量名作用
FILEINFO_NONE无特殊处理
FILEINFO_SYMLINK跟随符号链接
FILEINFO_MIME_TYPE返回 mime 类型。 自 PHP 5.3.0 可用
FILEINFO_MIME_ENcoding返回文件的 mime 编码。 自 PHP 5.3.0 可用
FILEINFO_MIME按照 RFC 2045 定义的格式返回文件 mime 类型和编码
FILEINFO_COMPRESS解压缩压缩文件。 由于线程安全问题,自 PHP 5.3.0 禁用
FILEINFO_DEVICES查看设备的块内容或字符
FILEINFO_CONTINUE返回全部匹配的类型
FILEINFO_PRESERVE_ATIME如果可以的话,尽可能保持原始的访问时间
FILEINFO_RAW对于不可打印字符不转换成 \ooo 八进制表示格式
FILEINFO_EXTENSION根据 MIME 类型返回适当的文件扩展名。 有的文件类型具有多种扩展名,例如 JPEG 将会返回多个扩展名,以斜杠分隔,比如 “jpeg/jpg/jpe/jfif”。如果在 magic.mime 数据库里类型未知,则返回的是 “???”。 PHP 7.2.0 起有效

如何使用fileinfo去过滤上传文件

首先我们要创建一个 fileinfo 资源,然后就可以调用 fileinfo 资源了

$file = $_FILES;$finfor = finfo_open(FILEINFO_MIME_TYPE);$info = finfo_file($finfor, $file['jpg']['tmp_name']); //拿上传文件的MIME头与finfo_open()返回mime类型进行比较返回真实的mime头

此时若上传文件是txt文件伪造后的jpg等图片文件则会返回一个txt文件的mime头
那修改掉数据包中的mime头可以绕过吗?
在这里插入图片描述
上面这图就是直接上传的一个txt改jpg图片文件的,可以看到他的mime类型为image/jpeg

POST /study/wjsc/sc.php Http/1.1Host: 192.168.0.106Content-Length: 199Cache-Control: max-age=0Upgrade-Insecure-Requests: 1Origin: http://192.168.0.106Content-Type: multipart/fORM-data; boundary=----WEBKitFormBoundarymrijfqP5su2sSW5YUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/103.0.0.0 Safari/537.36Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9Referer: http://192.168.0.106/study/wjsc/sc.phpAccept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9Connection: close------WebKitFormBoundarymrijfqP5su2sSW5YContent-Disposition: form-data; name="jpg"; filename=".jsp.jpg"Content-Type: image/jpeg<?php phpinfo();?>------WebKitFormBoundarymrijfqP5su2sSW5Y--

看一下上传后的效果
在这里插入图片描述
提示不合法,可以看一下返回的mime类型
在这里插入图片描述
返回为text/x-php类型。

如何去绕过fileinfo检测

这样写看似安全,但是由于fileinfo的检测原理恰恰会出现安全漏洞。
首先,先上传一个正常的图片
在这里插入图片描述
提示合法。
那接下来若上传的是一个图片马呢
图片马的合成
在这里插入图片描述
提示合法,可以看到mime类型也是image/png,那由此可见fileinfo也不是无敌的。
在这里插入图片描述
接下来就是思考正常的图片与伪造过后的图片有哪些不一样,在一张图片中大概是由文件头和内容组成那伪造的图片除了内容以外就是文件头的问题了
在伪造的文件中加上GIF89a,然后上传。
在这里插入图片描述
可以看到提示合法
在这里插入图片描述
就这样就绕过了fileinfo的检测
方便实验我将文件后缀改成了.php
在这里插入图片描述
执行成功!
在墨者学院的在线靶场中也存在一样的漏洞靶场可以帮助快速了解这个漏洞

来源地址:https://blog.csdn.net/m0_52361291/article/details/125902327

--结束END--

本文标题: PHP文件上传中fileinfo出现的安全问题

本文链接: https://lsjlt.com/news/406797.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • PHP文件上传中fileinfo出现的安全问题
    什么是fileinfo fileinfo的函数通过在文件的给定位置查找特定的魔术字节序列 来猜测文件的内容类型以及编码,也就是说我们可以获得上传文件的MIME信息 在windows中我们可以在php....
    99+
    2023-09-14
    php 安全 服务器
  • PHP中的文件上传安全
    随着 Internet 的发展,文件上传功能已经成为了几乎所有 Web 应用程序的标准功能之一。在 PHP 中,文件上传功能是通过 $_FILES 超全局变量来实现的。然而,文件上传功能往往也是 Web 应用程序中最容易出现安全问题的地方。...
    99+
    2023-05-23
    PHP上传文件 文件安全 后端上传
  • 怎么解决php上传文件出错问题
    这篇文章将为大家详细讲解有关怎么解决php上传文件出错问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。php上传文件出错的解决办法:1、在php.ini配置文件中设置“post_max_size”的值;...
    99+
    2023-06-08
  • php上传中文文件无法上传问题怎么解决
    php上传中文文件无法上传的解决办法:1、通过“iconv("GBK", "UTF-8", $content);”方法将中文字符编码转换一下;2、将文件重命名即可。本教程操作环境:Windo...
    99+
    2023-05-14
    php 文件
  • php 上传文件 出现413 Request Entity Too Large问题的解决方法
    配置:php + nginx  需求:上传小文件正常,上传大于2M 的PDF文件就提示“出现413 Request Entity Too Large问题的解决方法” 经过排查,这是nginx 拦截了,没有到Laraverl 程序,所以判断...
    99+
    2023-10-21
    php 开发语言 Powered by 金山文档
  • 怎么解决php不能上传中文文件问题
    这篇文章主要介绍“怎么解决php不能上传中文文件问题”,在日常操作中,相信很多人在怎么解决php不能上传中文文件问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决php不能上传中文文件问题”的疑惑有所...
    99+
    2023-06-20
  • 完全解决FTP上传文件名称中文乱码问题
    完全解决FTP上传文件名称中文乱码问题 说明无效踩坑经历 有效解决方法定时上传文件至ftp样例 说明 今天项目上加了个定时扫描本地文件路径下所有文件实现自动上传至ftp文件服务器的功能,经测试发现一旦上传中文名称的文件...
    99+
    2023-08-21
    服务器 java 运维
  • PHP 代码安全:防范文件上传漏洞
    为了防止php文件上传漏洞,需要:验证文件类型限制文件大小清理文件信息使用白名单仅允许特定类型文件上传 PHP 代码安全:防范文件上传漏洞 引言 文件上传功能是 Web 应用程序中的常...
    99+
    2024-05-10
    安全 php
  • php中上传后文件出现乱码如何解决
    在进行PHP文件上传时,一些用户可能会遇到上传后文件出现乱码的问题。这是一个相对常见的问题,但是解决起来也比较简单。首先,我们需要了解一下上传文件中的编码问题。当我们在浏览器中选择要上传的文件时,浏览器会将文件名进行编码并以multipar...
    99+
    2023-05-14
  • 不安全的文件下载和上传
    不安全的文件下载和上传(PIKACHU) 文件下载漏洞概述 很多网站都会提供文件下载功能,即用户可以通过点击下载链接,下载到链接所对应的文件。 但是,如果文件下载功能设计不当,则可能导致攻击者可以...
    99+
    2023-09-01
    安全 php web安全
  • 怎么解决php没有文件被上传问题
    这篇文章主要讲解了“怎么解决php没有文件被上传问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决php没有文件被上传问题”吧!php没有文件被上传的解决办法:1、修改php.ini...
    99+
    2023-06-25
  • 如何处理PHP开发中的文件上传和下载问题
    在PHP开发中,文件上传和下载是常见的功能需求。本文将介绍如何处理PHP开发中的文件上传和下载问题,并提供具体的代码示例,帮助读者快速上手。一、文件上传创建上传表单首先,需要在页面上创建一个上传表单,以便用户选择并上传文件。可以使用HTML...
    99+
    2023-10-21
    文件上传 文件下载 PHP开发
  • PHP 框架安全指南:如何保护上传的文件?
    问题:如何保护 php 框架中的文件上传安全?答案:通过遵循以下步骤,保护 php 框架中的文件上传安全:验证文件类型:防止恶意文件上传。限制文件大小:确保文件大小在可接受范围内。使用安...
    99+
    2024-05-23
    安全 php laravel
  • 如何解决php只能上传1k内的文件问题
    这篇文章主要讲解了“如何解决php只能上传1k内的文件问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何解决php只能上传1k内的文件问题”吧!php只能上传1k内的文件的解决办法:1、...
    99+
    2023-06-25
  • pandas读取中文xlsx文件出现的问题
    目录panda读取中文xlsx文件解决pandas读取xlsx时报错panda读取中文xlsx文件 1、数据为中文内容,xlsx文件保存。 2、直接读取文件出错(Python报错:p...
    99+
    2024-04-02
  • 【web安全】——文件上传的绕过方式
    作者名:白昼安全 主页面链接: 主页传送门 创作初心: 一切为了她 座右铭: 不要让时代的悲哀成为你的悲哀 专研方向: web安全,后渗透技术 每日emo: ...
    99+
    2023-08-31
    web安全 javascript 前端 Powered by 金山文档
  • springboot文件上传保存路径的问题
    目录springboot文件上传保存路径配置代码如下Springboot上传文件的问题(上传到本地文件夹中)先建立一个controller包静态资源目录如下springboot文件上...
    99+
    2024-04-02
  • JavaScript文件上传的常见问题整理
    文件上传:<input type="file" /> (IE9及以下不支持下面这些功能,其它浏览器最新版本均已支持。) 1、允许上传文件数量 允许选择...
    99+
    2024-04-02
  • 用php如何解决大文件分片上传问题
    如果上传的文件只有小于10M的话, 就没必要考虑这样的做法, 直接在 php.ini中更改一下 upload_max_filesize = 10m post_max_size = 1...
    99+
    2024-04-02
  • php文件名相同不上传问题怎么解决
    如果在上传过程中遇到了相同的文件名问题,可以考虑以下几种解决方案:1. 重命名文件:可以手动将其中一个文件进行重命名,例如添加一个后...
    99+
    2023-10-07
    php
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作