390   PHP

一,背景

 

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

Your email address will not be published. Required fields are marked *