上传接口同时涉及用户身份、文件解析、存储和下载。扩展名合法不代表内容安全;仅在浏览器检查类型和大小,无法阻止绕过请求的攻击。
限定允许的输入
根据业务选择类型和大小,服务端检查内容与必要的文件特征。使用受控文件名,禁止客户端决定完整路径。压缩包还要限制解压后数量和大小,防止资源被耗尽。
存储位置不能执行脚本
上传目录与可执行代码隔离,必要时放在非公开目录或独立存储。图片可以经过可靠解码重建;下载时使用合适类型与附件策略。不要依赖修改扩展名就认为文件无法执行。
访问按对象授权
每次查看或删除文件都检查用户是否有权访问对应记录。规范化路径后仍要限制在允许目录,拒绝目录遍历与任意文件引用。不要因知道文件名就允许访问他人的合同或备份。
验证异常与清理
测试无权限、超大文件、重复文件、错误类型和存储失败。恶意文件检测与人工审核按风险采用,不把任何单项检查当作完全安全。清理临时文件,日志记录标识与结果,不公开内部路径。
参考资料
上传后不能直接成为可执行内容
文件保存在受控目录,名称由系统生成,下载访问核对用户与对象权限。
验证类型、大小及必要扫描,测试伪装文件与路径参数;仅限制扩展名不能覆盖所有风险。
例如文件名以图片结尾但实际内容异常,应结合类型与存储策略处理,不只看扩展名。