全部 ApiPost使用 后端 前端 接口测试 IOS Android 数据库 程序人生 测试技术 工具
问答 / 解决方案 / 解决方案详情

不仅仅依赖后缀,PHP后端如何校验上传的文件是不是一张图片?

后端 程序人生 27次浏览

通常我们校验上传的文件是否是一张图片时,仅会检查它的后缀是不是jpg/png/gif等。但是这种方式是不可靠的。

比如,我们可以把一个 脚本.js 脚本通过更改后缀的方式改为:脚本.jpg

可怕的是,在部分浏览器上,这个脚本.jpg还会被解析执行。这样就造成了XSS攻击。

如何防范呢?

| 0 收藏

解决方案

我们除了检查文件后缀,还要检查mime头。

通常在php中,有一个函数

getimagesize()

可以做这件事,如下图,当上传的文件是一张图片的时候,它会返回一个带有图片宽、高等信息的数组(真),否则返回失败。

<?php
$_img_info = getimagesize($_FILES['images']['tmp_name']);
if(is_array($_img_info) && $_img_info){
    echo '是图片';
}else{
    echo '不是图片';
}

当然,还有很多办法校验,以上方法仅为抛砖引玉。

评论

开发者问答

只服务于

前后端、移动端、测试人员

发布解决方案 发布您遇到的Bug和解决方案,成为大神,让众人膜拜吧!