安全校验文件后缀名需先清理文件名(去空格、 、/等),再取最后一个点后的扩展名并转小写,最后用白名单Set比对;禁用正则全名匹配防双扩展攻击;前端校验仅为体验优化,后端必须基于文件头magic bytes二次验证。

校验文件后缀名的核心是提取文件名中的扩展名,并与允许的类型列表比对,不能只靠正则简单匹配字符串,否则容易被绕过(比如 xxx.jpg.exe 或 xxx.png%00.jpg)。关键在于:先安全获取真实扩展名,再白名单校验。
提取扩展名要可靠,别被文件名欺骗
用户上传的文件名不可信,可能伪造、含路径、大小写混杂或带 URL 编码。应使用以下方式提取:
- 用
lastIndexOf('.') + 1找最后一个点之后的部分(不是第一个),避免report.data.json被误判为data - 去掉空格和常见干扰字符(如
%00、
