php实现班级通信录导入限制文件类型_php校验后缀导入法【技巧】-php教程

最稳方案是:先筛后缀,再读文件头校验magic bytes,用finfo检查mime类型,保存为随机名且路径禁脚本执行,phpspreadsheet设setreaddataonly(true)和限定工作表,流式读取,pdo预处理+事务写库。

只允许上传 .xlsx 和 .xls 文件,PHP 怎么做最稳?

靠前端 “ 或 JS 检查后缀纯属摆设,必须在 PHP 层硬校验。关键不是看文件名后缀,而是读取文件头(magic bytes)+ 解析实际内容结构。

  • 先用 pathinfo($filename, PATHINFO_EXTENSION) 快速筛掉明显不对的后缀(如 .php、.exe),但不能仅依赖它
  • 再用 fopen() 读取前 16 字节,比对 Excel 文件特征:\xD0\xCF\x11\xE0(.xls)或 PK\x03\x04(.xlsx 的 ZIP 头)
  • 最后尝试用 PhpSpreadsheet 加载——如果抛出 PhpOffice\PhpSpreadsheet\Reader\Exception,说明不是合法 Excel,直接拒收

$_FILES['file']['name'] 后缀可被伪造,怎么防?

攻击者改个 student.php.xls 就能绕过简单 str_ends_with() 判断。真实风险在于:你用 move_uploaded_file() 存到临时目录后,仍可能被当成 PHP 执行(尤其当 web server 配置宽松时)。

  • 不要用原始文件名保存,生成随机名(如 uniqid('import_').'.xlsx')
  • 保存路径必须在 web root 外,或至少禁用该目录下所有脚本执行(Nginx 加 location ~ \.(php|sh|pl)$ { deny all; })
  • 上传后立即用 finfo_open(FILEINFO_MIME_TYPE) 检查 MIME 类型,application/vnd.ms-excel 和 application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 才放行

用 PhpSpreadsheet 导入前,为什么一定要调 setReadDataOnly(true)?

不加这个,Excel 里带公式的单元格会触发计算引擎,可能执行恶意宏逻辑(虽现代版本默认禁用,但兼容性风险仍在),更严重的是:大文件加载全量对象会吃光内存。

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » php实现班级通信录导入限制文件类型_php校验后缀导入法【技巧】-php教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4021157+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1393+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4021157+
  • 本周更新: 0+
  • 最后更新: 2026-03-16