一,背景
1,图片从前端上传到后端PHP处理,可以通过全局变量$_FILES查看上传的图片信息,其中就包括了图片类型type;
2,但是$_FILES参数是从前端浏览器传过来的,不同浏览器返回的type可能不同,而且可能会被伪造;
如果获得上传图片的真实类型呢?
二,getimagesize($filename)
此函数会打印出图片一些基本信息,包括图片的mime类型,即图片的真实类型;
下面来测试一下
1,前端上传图片代码
<html> <body> <form action="hello.php" method="post" enctype="multipart/form-data"> <label for="file">Filename:</label> <input type="file" name="file" id="file" /> <br /> <input type="submit" name="submit" value="Submit" /> </form> </body> </html>
2,后端php显示上传图片的信息
$file = $_FILES['file']; echo 'file',"\n"; var_dump($file); echo 'getimagesize',"\n"; var_dump(getimagesize($file["tmp_name"]));
3,将一张类型为png的图片,重名后缀为jpg,然后上传,显示结果如下
file array(5) { ["name"]=> string(9) "62258.jpg" ["type"]=> string(10) "image/jpeg" ["tmp_name"]=> string(22) "D:\wamp\tmp\phpB23.tmp" ["error"]=> int(0) ["size"]=> int(15697) } getimagesize array(6) { [0]=> int(107) [1]=> int(96) [2]=> int(3) [3]=> string(23) "width="107" height="96"" ["bits"]=> int(8) ["mime"]=> string(9) "image/png" }
对比一下就明白了
$file中的图片名称name为62258.jpg,类型type为image/jpeg;
而getimagesize中图片类型mime为image/png,这才是图片真实的类型,即使被恶意修改了后缀也一样能识别
Leave a Reply