PC版微信截图的bug

news/2024/11/24 16:50:21/

客户报障,微信截图,粘贴到微信中再复制出来后为jpg格式图片,上传系统显示图片格式错误;使用原始图片上传就没问题(也是jpg格式)

查看代码,系统对图片格式的校验规则如下:

public function rules(){return [['file', 'file', 'skipOnEmpty' => false, 'extensions' => ['jpg', 'png', 'jpeg'],'maxSize' =>3*1024*1024, 'message' => 'UploadFail:upload_incorrect','tooBig' => 'InvalidFile:size_invalid','mimeTypes' => ['image/jpeg', 'image/png'],'checkExtensionByMimeType' => true,'wrongExtension' => 'InvalidFile:type_invalid','uploadRequired' => 'MissingParameter:missing_parameter','wrongMimeType' => 'InvalidFile:type_invalid'],];
}

可以看到允许拓展名为Jpg、png和jpeg;找到校验器:yii\validators\Validator,可以看到文件校验器:

查看文件校验器中校验拓展名的部分:

这里开启了checkExtensionByMimeType校验,在FileHelper::getMimeType()埋点查看系统解析出来的mimeType是image/png,令人很惊讶,于是查看FileHelper::getMimeType()方法:

这里打印出来确实解析微信截图的时候,值为impage/png ,就开始怀疑是图片本身有问题了。用getimagesize()函数验证一下这个图片:

<?php$size = getimagesize('a');
var_dump($size);

 得到的返回值如下:

看来这个图片的mime type确实为image/png格式了,于是想看看图片前几个字节当中有没有什么信息,查看图片的十六进制格式:

图片前几个字节有些对应关系:

1.JPEG/JPG
- 文件头标识 (2 bytes): $ff, $d8 (SOI) (JPEG 文件标识) 
- 文件结束标识 (2 bytes): $ff, $d9 (EOI) 

2.TGA
- 未压缩的前5字节     00 00 02 00 00
- RLE压缩的前5字节     00 00 10 00 00

3.PNG
- 文件头标识 (8 bytes)     89 50 4E 47 0D 0A 1A 0A

4.GIF
- 文件头标识 (6 bytes)     47 49 46 38 39(37) 61
                                               G    I    F    8   9 (7)    a

5.BMP
- 文件头标识 (2 bytes)     42 4D
                                               B     M

6.PCX
- 文件头标识 (1 bytes)     0A

7.TIFF
- 文件头标识 (2 bytes)     4D 4D 或 49 49

8.ICO
- 文件头标识 (8 bytes)     00 00 01 00 01 00 20 20 

9.CUR
- 文件头标识 (8 bytes)     00 00 02 00 01 00 20 20

10.IFF
- 文件头标识 (4 bytes)     46 4F 52 4D
                                               F    O    R    M

11.ANI
- 文件头标识 (4 bytes)     52 49 46 46
                                                R    I    F   F 

  • JPEG我们知需要比对文件头的$ff, $d8这两个字符,而不用读取最后的两个结束标识了。
  • TGA,ICO,CUR只需比对第三个与第五个字符即可。
  • PNG比对[89][50]这两个字符。
  • GIF比对[47][49][46]与第五个字符。

所以问题定位出来了:微信截图,粘贴后再复制出来,虽然粘贴后缀名称是jpg格式,但是查看图片的前两个字节就能发现其实它是个png格式的。mime type格式和拓展名格式不一致导致系统校验未通过。

 本文参考了:https://blog.csdn.net/july_young/article/details/80854926


http://www.ppmy.cn/news/629124.html

相关文章

解密PC版微信数据库ChatMsg.db

最近发现用Python生成词云图挺有意思的&#xff0c;于是想着生成微信和某个人的聊天记录的词云应该挺好玩。 在网上找了好多解密微信数据库的文章&#xff0c;但大多数都是解密Android版的&#xff0c;好不容易找到些解密PC版的还写得不够详细。 不过最后终于解密成功&#x…

微信PC版防撤回补丁(最新)

注&#xff1a;本补丁仅适用于PC版微信 支持版本&#xff1a; 支持最新版本&#xff1a;2.6.8.52 支持历史版本&#xff1a;2.6.6.28、2.6.7.32、2.6.7.40、2.6.7.57、2.6.8.37、2.6.8.51 环境需求&#xff1a; Windows 7 或更高版本。 .NET Framework 4.5 或更高版本。 开源…

AI在棒球运动中的运用·棒球1号位

AI在棒球运动中的运用 1. AI在棒球运动中的历史应用 详细回顾AI在棒球运动中的历史应用。 在棒球运动的漫长历史长河中&#xff0c;AI的身影始终伴随左右&#xff0c;且随着科技的进步&#xff0c;AI的应用逐渐成为了人们瞩目的焦点。追溯到60多年前&#xff0c;当时&#xf…

PC版微信自动回复工具

最近接到一个项目&#xff0c;客户要求给PC版微信添加自动回复功能&#xff0c;注意&#xff0c;客户要求的是PC版&#xff0c;不是安卓虚拟机版的微信&#xff0c;更不是网页版微信&#xff01; 看了网上有介绍的使用C#开发的&#xff0c;使用了系统剪切板&#xff0c;但是这种…

微信PC版防撤回

人总是有好奇心的&#xff0c;好友发了微信消息&#xff0c;然后撤回了&#xff0c;就很想知道&#xff0c;但是又不好意思问。。。。 万一是女神表白呢&#xff1f;哈哈~~~~ 网上也有很多教程。这里仅为记录一下。用别人放网上的又感觉不安全。。遂自己折腾一下。。 好了言…

pc端网站微信登录

PC端网站的微信登录&#xff0c;首先要开通微信开放平台&#xff0c;跟微信公众号开发所需微信公众平台意思差不多。百度搜索微信开放平台&#xff0c;点击官网即可。 一.微信开放平台 这个平台的重点就是AppID、AppSecret和回调域名&#xff0c;后续用的到。 二.微信登录 这…

张小龙:做 PC 版微信是一种破坏

本文转载自 IT之家 微信早期是没有 PC 版的&#xff0c;即使现在已经有了&#xff0c;也不如手机端好用&#xff0c;每次登录都需要在手机上确认&#xff0c;长时间不登录甚至需要手机端重新扫码。 据了解&#xff0c;“微信之父”张小龙在其作品《微信背后的产品观》一书中透…

牛逼!PC内测版微信,含重大更新!

大家好&#xff0c;我是 JackTian。 微信移动端更新的6个新表情我真是爱了&#xff0c;但这几个新的表情在PC端目前还没有。 这不最近&#xff0c;微信团队刚刚发布了PC端微信3.1.0内测版&#xff0c;更新了一些功能&#xff0c;就包括增加这6个新的表情。 除此之外&#xf…