黑马程序员技术交流社区
标题: 案例分析之PHP文件上传时,如何识别文件伪装? [打印本页]
作者: huawei 时间: 2016-12-17 21:39
标题: 案例分析之PHP文件上传时,如何识别文件伪装?
本帖最后由 huawei 于 2017-3-5 10:35 编辑
文件上传之识别文件伪装
PHP学院 教学总监 孙静
在web开发过程中文件上传是不可绕过的话题,上传文件的时候需要验证上传的文件是否合法。通常情况下使用文件扩展名和文件类型来验证是不能识别文件伪装的,我们需要使用php_fileinfo.dll扩展来识别文件伪装。
我们来测试一下,首先准备好文件上传的表单:
[HTML] 纯文本查看 复制代码
<form method="post" action="" enctype="multipart/form-data">
图片上传: <input type="file" name="image">
<input type="submit" name="button" value="上传">
</form>
然后我们在做一个用记事本伪装的图片
1、我们在硬盘上新建一个记事本文件
2、将记事本改为“image.jpg”
这时候从外观上看起来是个图片,但实际上是个记事本文件,此时我们成功将记事本伪装成图片
下面我们来验证一下那种方法可以识别文件伪装
1.1.1 方法一:通过获取文件路径信息来判断我们通过pathinfo()函数用来获取文件路径的信息,
[PHP] 纯文本查看 复制代码
<?php
if(isset($_POST['button'])) {
$info=pathinfo($_FILES['image']['name']);
echo '<pre>';
print_r($info);
}
?>
选择我们刚才伪装的图片文件“image.jpg”,点击“上传”,我们可以看到如下结果
[PHP] 纯文本查看 复制代码
Array
(
[dirname] => .
[basename] => image.jpg
[extension] => jpg
[filename] => image
)
结果中[extension] => jpg,说明pathinfo()没有识别出图片伪装。
1.1.2 方法二:使用$_FILES获取文件类型来判断$_FILES[]['type']用来获取文件的MIME类型
[PHP] 纯文本查看 复制代码
<?php
if(isset($_POST['button'])) {
echo $_FILES['image']['type'];
}
?>
再伪装的图片文件“image.jpg”,点击“上传”,我们可以看到如下结果
[PHP] 纯文本查看 复制代码
image/jpeg
说明通过$_FILES获取文件的MIME格式也不能识别图片伪装
1.1.3 方法三:使用php_fileinfo扩展来判断
在使用php_fileinfo.dll扩展之前必须先在php.ini中开启php_fileinfo.dll扩展
开启扩展后,我们就可以使用php_fileinfo.dll了,使用php_fileinfo.dll扩展很简单,只要两步即可。
第一步:创建一个 fileinfo 资源,用此资源获取文件mime类型和编码
[PHP] 纯文本查看 复制代码
$finfo=finfo_open(FILEINFO_MIME);
输出结果是“inode/x-empty; charset=binary”,我们可以看到php_fileinfo.dll扩展能识别image.jpg是伪装的图片,此文件本质是二进制编码的空文件。
1.1.4 结论要识别文件伪装需要使用php_fileinfo扩展。
精华推荐:
视频集合:众多老学员呐喊:"为什么我选传智PHP"!
作者: 肖肖肖 时间: 2016-12-18 21:08
谢谢分享!!!
作者: 290422624 时间: 2016-12-20 17:47
跟着大神打天下
作者: chen521 时间: 2016-12-21 08:53
http://bbs.itheima.com/thread-336282-1-1.html?mxhw
作者: php黑牛 时间: 2016-12-22 14:50
来学习学习
作者: hp_eckj_luox 时间: 2016-12-23 09:48
案例分析之PHP文件上传时,如何识别文件伪装?
作者: xiami23king 时间: 2017-1-17 09:58
6666666666666666666
作者: sunsine 时间: 2017-2-7 20:43
学习一下
作者: 1317181388 时间: 2017-2-10 01:28
感谢楼主分享
作者: sunshine1992 时间: 2017-2-10 11:48
RE: 案例分析之PHP文件上传时,如何识别文件伪装? [修改]
作者: xyz2017 时间: 2017-2-14 20:36
6666666666666666666666
作者: fjdaslfjk 时间: 2017-2-16 14:59
PHP文件上传时,如何识别文件伪装?
作者: 用户名不得小 时间: 2017-2-17 22:28
防盗链技术防盗链技术
作者: muyu123 时间: 2017-2-24 15:09
支持一下
作者: 神佑骑士 时间: 2017-3-6 17:23
测试一下,验证码那个,是一个库吗?
作者: Overflow 时间: 2017-3-12 16:49
1111111111111111111111
作者: zhang9648 时间: 2017-3-24 23:35
这么多方法!!!
作者: HiHMH 时间: 2017-4-17 16:41
好!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
作者: vcflyfeel 时间: 2017-4-26 13:01
123123123123
作者: worldtongf 时间: 2017-5-21 00:58
例分析之PHP文件上传时,如何识别文件伪装? [修改]
作者: 瞬间回忆 时间: 2017-5-24 17:25
案例分析之PHP文件上传时,如何识别文件伪装?
作者: rebirthday 时间: 2017-5-31 10:03
谢谢楼主的分享
作者: snackstops 时间: 2017-6-22 14:36
学习
学习
学习
学习
作者: 961900940 时间: 2017-7-4 23:11
111111111111111
作者: 山与暮歌 时间: 2017-8-14 15:28
$_FILES["file"]["name"]
作者: 姜百虎 时间: 2017-8-28 22:08
好文章,值得推荐
作者: cgl 时间: 2017-9-8 04:05
....rwjwjrwrj;rwrwr
作者: yuanlinjiayou 时间: 2017-9-10 12:11
1111111111111111
作者: Rakishly 时间: 2017-9-20 23:13
案例分析之PHP文件上传时
作者: 蜗牛泛泛 时间: 2017-9-26 14:47
55555555555555555
作者: yinkuang 时间: 2017-9-27 12:13
不错,正找这个呢
作者: 12580 时间: 2018-5-17 00:57
1sfsfsdfsadfsdfsdfsdfsd
作者: yuyongting2001 时间: 2018-7-6 00:23
通过技术手段来进行处理,一旦检测到来源不是本站即
作者: uuuqqq 时间: 2018-10-7 08:13
有没搞错这还要隐藏啊!!!!
作者: june01 时间: 2018-12-31 10:47
1111111111111111111111
作者: bug刘 时间: 2019-1-22 16:29
学习学习
作者: manyi2009 时间: 2019-3-1 10:34
感谢分享
作者: 1024316664 时间: 2019-3-15 16:22
学习血虚
作者: ksqbhmcxy 时间: 2019-11-23 10:30
1111111111111111111
作者: mgwzfxd 时间: 2020-6-29 16:33
此资源获取文件mime类型和编
作者: 啦啦哈啦啦 时间: 2021-5-26 16:48
感谢分享
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |