php检测上传excel文件类型
前言
MIME类型
文件检测弊端
- 文件扩展名检测漏洞(ps:文件扩展名可以被任意伪造)
- 文件MIME类型判断不能使用$_FILES['userfile']['type'](ps:根据PHP官方的文档说明,该值完全可以被伪造!黑客只需修改浏览器的post请求头即可绕过这段代码检查,进而上传任意类型的文件!)
检测方法(针对excel)
- 通过文件扩展名判断是03的excel文件还是07的excel文件
- 根据不同的文件,获取不同文件的二进制数据,和file_signature进行对比,我截了03和07的excel的二进制数据图,大家可以参考一下,工具是madedit
- 03的excel
- 07的excel(07可以参考zip检测)
检测程序
/*** Detect upload file type* * @param array $file * @return bool $flag*/private function detectUploadFileMIME($file) {// 1.through the file extension judgement 03 or 07$flag = 0;$file_array = explode ( ".", $file ["name"] );$file_extension = strtolower ( array_pop ( $file_array ) );// 2.through the binary content to detect the fileswitch ($file_extension) {case "xls" :// 2003 excel$fh = fopen ( $file ["tmp_name"], "rb" );$bin = fread ( $fh, 8 );fclose ( $fh );$strinfo = @unpack ( "C8chars", $bin );$typecode = "";foreach ( $strinfo as $num ) {$typecode .= dechex ( $num );}if ($typecode == "d0cf11e0a1b11ae1") {$flag = 1;}break;case "xlsx" :// 2007 excel$fh = fopen ( $file ["tmp_name"], "rb" );$bin = fread ( $fh, 4 );fclose ( $fh );$strinfo = @unpack ( "C4chars", $bin );$typecode = "";foreach ( $strinfo as $num ) {$typecode .= dechex ( $num );}echo $typecode;if ($typecode == "504b34") {$flag = 1;}break;}// 3.return the flagreturn $flag;}
参考链接
php检测上传excel文件类型相关推荐
- php上传查询excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
PHP上传Excel文件导入数据到MySQL数据库示例2020-06-20 00:34:11 最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里 ...
- php 上传excel到mysql_PHP上传Excel文件导入数据到MySQL数据库示例
最近在做Excel文件导入数据到数据库.网站如果想支持批量插入数据,可以制作一个上传Excel文件,导入里面的数据内容到MySQL数据库的小程序. 要用到的工具: ThinkPHP:轻量级国产PHP开 ...
- vue之 上传 excel文件
目录 vue之 上传 excel文件 父组件 UploadExcel.vue 效果 vue之 上传 excel文件 父组件 <upload-excel-component :on-success ...
- 实现web前端上传excel文件到flask服务器
这里有两种方法:1. html方式:2. javascript方式(jQuery+ajax) 第1种方法:html方式 这种方法直接通过设计form表单相关属性实现将excel表格上传到服务器,并在服 ...
- springboot实现上传Excel文件与数据库中的数据进行比对
springboot实现上传Excel文件与数据库中的数据进行比对 首先先写好文件上传的接口,然后上传需要比对数据的文件,在点击数据比对 下面是一部分数据比对的代码: 后端controller部分: ...
- Django框架(上传Excel文件并读取)
博主今天整理下Django框架中上传Excel文件并读取 博主是要在管理平台中新增用例的维护功能,想着通过上传Excel文件来展示用例,下面是项目的路径图: 首先先建数据库模型 model.py 可以 ...
- 2008下php上传文件崩溃,php – 当用户反复尝试上传无效文件类型时,网站崩溃
我试图理解错误-- 我有一个允许用户上传CSV的网络应用程序.如果文件类型不是CSV,则不会发生任何操作,页面只显示"无效的文件类型". 如果用户尝试上载无效的文件类型并反复单击触 ...
- 服务器上传excel文件并读取数据,asp.net上传Excel文件并读取数据的实现方法
前言 本文主要给大家介绍了关于asp.net上传Excel文件并读取数据的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧 实现如下: 前台代码:使用服务端控件实现上传 服务端 ...
- php上传常见文件类型和$_FILES[file][type]
php上传常见文件类型对应的$_FILES["file"]["type"]. xls application/vnd.ms-excel xlsx applica ...
最新文章
- 动画 Interpolator
- UIView翻译 (参考)
- input css年月日,input标签的type为date,显示的日期格式样式更改
- idea看更改过的代码_就是你把所有代码全写在一个类里的?
- 别慌,不就是跨域么!
- [转载]读史记札记26:容人岂皆有雅量
- 《西游记》中九尾狐狸为什么有太上老君的幌金绳?
- java多线程都有几种方式实现
- Leetcode 刷题笔记(二十二) ——贪心算法篇之进阶题目
- 忘记root密码,使用救援模式,grup设置密码
- PHP编写时的灵活性
- 如何在GitHub中上传图片-----简单易行,步骤超清晰
- Unity开发——CPU优化篇
- 网站渗透测试该怎么选择最便宜
- android 沙盒双开 微信,微信双开回来了,还不会被封号
- Python可视化matplotlib07-更靓的单颜色(二)
- 硬件工程师要学习的东西
- 数据库MySQL创库、创表基本命令
- Machine Learning | (1) Scikit-learn与特征工程
- Windows8安装Visual Studio 2012的方法