A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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"!

41 个回复

正序浏览
感谢分享
回复 使用道具 举报
此资源获取文件mime类型和编
回复 使用道具 举报
1111111111111111111
回复 使用道具 举报
学习血虚
回复 使用道具 举报
感谢分享
回复 使用道具 举报
学习学习
回复 使用道具 举报
june01 初级黑马 2018-12-31 10:47:39
36#
1111111111111111111111
回复 使用道具 举报
有没搞错这还要隐藏啊!!!!
回复 使用道具 举报
通过技术手段来进行处理,一旦检测到来源不是本站即
回复 使用道具 举报
12580 初级黑马 2018-5-17 00:57:56
33#
1sfsfsdfsadfsdfsdfsdfsd
回复 使用道具 举报
不错,正找这个呢
回复 使用道具 举报
55555555555555555
回复 使用道具 举报
案例分析之PHP文件上传时
回复 使用道具 举报
yuanlinjiayou 来自手机 初级黑马 2017-9-10 12:11:37
29#
1111111111111111
回复 使用道具 举报
cgl 初级黑马 2017-9-8 04:05:48
28#
....rwjwjrwrj;rwrwr
回复 使用道具 举报
好文章,值得推荐
回复 使用道具 举报
$_FILES["file"]["name"]
回复 使用道具 举报
111111111111111
回复 使用道具 举报
学习学习
学习
学习

回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马