通常我们校验上传的文件是否是一张图片时,仅会检查它的后缀是不是jpg/png/gif等。但是这种方式是不可靠的。
比如,我们可以把一个 脚本.js 脚本通过更改后缀的方式改为:脚本.jpg
可怕的是,在部分浏览器上,这个脚本.jpg还会被解析执行。这样就造成了XSS攻击。
如何防范呢?
我们除了检查文件后缀,还要检查mime头。
通常在php中,有一个函数
getimagesize()
可以做这件事,如下图,当上传的文件是一张图片的时候,它会返回一个带有图片宽、高等信息的数组(真),否则返回失败。
<?php
$_img_info = getimagesize($_FILES['images']['tmp_name']);
if(is_array($_img_info) && $_img_info){
echo '是图片';
}else{
echo '不是图片';
}
当然,还有很多办法校验,以上方法仅为抛砖引玉。