前端文件上传有哪些安全边界?
说明前端校验、服务端校验、文件名、大小、内容类型和存储隔离之间的关系,避免把客户端限制当成安全防护。
参考答案
浏览器端可以提前限制扩展名、大小和数量,改善用户体验,但这些值都能被绕过。服务端需要重新校验大小、数量、扩展名与实际内容,生成安全的存储名,限制路径和权限,并把上传文件放在不可直接执行脚本的隔离位置。
不能只信任 Content-Type 或文件名后缀。需要根据业务使用安全的内容识别、病毒扫描或图片重编码策略;下载时设置合适的 Content-Disposition、内容类型和 X-Content-Type-Options。如果文件需要公开访问,还要考虑任意文件读取、存储成本、恶意内容分发和权限撤销。
前端预览也有风险:不要把不可信 SVG、HTML 或 Markdown 直接当作可执行内容插入页面。预览应该使用安全的解析方式和严格的来源策略。