如何安全校验ThinkPHP中上传图片的真实MIME类型?
- 内容介绍
- 文章标签
- 相关推荐
本文共计817个文字,预计阅读时间需要4分钟。
plaintext使用浏览器提交文件时,前端可以伪造文件类型。例如,将文本文件伪装成图片文件。具体做法如下:
- 务必关闭
FILEINFO_MIME_TYPE的FILEINFO_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 导致失败。
本文共计817个文字,预计阅读时间需要4分钟。
plaintext使用浏览器提交文件时,前端可以伪造文件类型。例如,将文本文件伪装成图片文件。具体做法如下:
- 务必关闭
FILEINFO_MIME_TYPE的FILEINFO_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 导致失败。

