如何安全校验ThinkPHP中上传图片的真实MIME类型?

2026-04-30 11:361阅读0评论SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计817个文字,预计阅读时间需要4分钟。

如何安全校验ThinkPHP中上传图片的真实MIME类型?

plaintext使用浏览器提交文件时,前端可以伪造文件类型。例如,将文本文件伪装成图片文件。具体做法如下:

  • 务必关闭 FILEINFO_MIME_TYPEFILEINFO_NO_EXTENSION 选项,否则可能误判带 BOM 的 PNG
  • Windows 下需确认 php.ini 启用了 extension=fileinfo,否则 finfo_open() 直接报错
  • ThinkPHP 6+ 的 validate(['file' => 'image']) 默认只检查后缀和 $_FILES['type'],不触发真实 MIME 校验

ThinkPHP 中手动校验上传文件 MIME 的正确写法

不能依赖框架默认验证规则,必须在控制器或中间件里用 finfo_file 重检。关键点是:必须用临时文件路径($_FILES['file']['tmp_name']),不能用移动后的路径,否则可能因权限或 SELinux 导致失败。

阅读全文
标签:PHPThinkPHP

本文共计817个文字,预计阅读时间需要4分钟。

如何安全校验ThinkPHP中上传图片的真实MIME类型?

plaintext使用浏览器提交文件时,前端可以伪造文件类型。例如,将文本文件伪装成图片文件。具体做法如下:

  • 务必关闭 FILEINFO_MIME_TYPEFILEINFO_NO_EXTENSION 选项,否则可能误判带 BOM 的 PNG
  • Windows 下需确认 php.ini 启用了 extension=fileinfo,否则 finfo_open() 直接报错
  • ThinkPHP 6+ 的 validate(['file' => 'image']) 默认只检查后缀和 $_FILES['type'],不触发真实 MIME 校验

ThinkPHP 中手动校验上传文件 MIME 的正确写法

不能依赖框架默认验证规则,必须在控制器或中间件里用 finfo_file 重检。关键点是:必须用临时文件路径($_FILES['file']['tmp_name']),不能用移动后的路径,否则可能因权限或 SELinux 导致失败。

阅读全文
标签:PHPThinkPHP