PHP上传文件时,识别伪装。

PHP上传文件时,识别伪装。

我们在编写php文件上传的时候,可能会忽略了对上传文件进行验证,下面我们来进行关于:文件上传时验证上传的文件是否合法的问题。

一,简单的测试,将txt后缀的文件改成jpg;并进行上传。

二,修改完后进行简单的测试:

(1)通过$_FILES [‘user’] [‘type’] ;获取文件后缀名;
<!DOCTYPE html>
<html>
    <meta charset="utf-8">
<body>
    <h2>文件上传伪装测试</h2>
    <form method="post" action="" enctype="multipart/form-data">
        选择文件:
        <input type="file" name="userfile" />
        <input type="submit" value="提交" />
    </form>
</body>

<?php
$data=$_FILES['userfile'];
var_dump($data);
?>
</html>

我们提交完之后可以发现,并没有检测出来:

在这里插入图片描述

返回:

array(5) { ["name"]=> string(8) "test.png" 
		  ["type"]=> string(9) "image/png" 
		  ["tmp_name"]=> string(22) "C:\Windows\phpBE13.tmp" 
		  ["error"]=> int(0) 
		  ["size"]=> int(10) } 
(2)用pathinfo()函数来获取文件路径:
<!DOCTYPE html>
<html> 
    <meta charset="utf-8">
<body>
    <h2>文件上传伪装测试</h2>
    <form method="post" action="" enctype="multipart/form-data">
        选择文件:
        <input type="file" name="userfile" />
        <input type="submit" name="button" value="提交" />
    </form>
</body>

<?php
$data = $_FILES['userfile'];
var_dump(pathinfo($data['name']));
?>
</html>

返回:

array(4) { ["dirname"]=> string(1) "." ["basename"]=> string(8) "test.png" ["extension"]=> string(3) "png" ["filename"]=> string(4) "test" } 

仍然认为我们的文件是png文件,没有检测出来。

(3)用php的拓展,fileinfo来判断。
<!DOCTYPE html>
<html> 
    <meta charset="utf-8">
<body>
    <h2>文件上传伪装测试</h2>
    <form method="post" action="" enctype="multipart/form-data">
        选择文件:
        <input type="file" name="userfile" />
        <input type="submit" value="提交" />
    </form>
</body>

<?php
$data = $_FILES['userfile'];
$filename = $data['tmp_name'];
$fileinfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($fileinfo, $filename);

finfo_close($fileinfo);
var_dump($mimetype);
?>
</html>

上传后,返回如下:判断为text文件:

在这里插入图片描述
判断成功,可以识别伪装文件。

三,附上完整的识别文件伪装代码:

<!DOCTYPE html>
<html> 
    <meta charset="utf-8">
<body>
    <h2>文件上传伪装测试</h2>
    <form method="post" action="" enctype="multipart/form-data">
        选择文件:
        <input type="file" name="userfile" />
        <input type="submit" name="button" value="提交" />
    </form>
</body>

<?php
if(!empty($_POST)){
    $fileinfo = finfo_open(FILEINFO_MIME_TYPE);   //创建info资源
    $mimetype = finfo_file($fileinfo, $_FILES['userfile']['tmp_name']);  //与finfo资源和文件做比较
    finfo_close($fileinfo);

    $pass = array('image/png', 'image/jpeg', 'image/gif'); //允许通过类别
    echo in_array($mimetype, $pass)?'合法':'非法';
}
?>
</html>


last: thank u for watching!!!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值