Gin 上传文件的几个坑
文件上传接口看起来简单,实际风险集中在三个地方:文件大小、文件名、存储路径。只用 SaveUploadedFile 很容易把用户输入带进文件系统。
入口层要限制 body 大小,业务层要重新生成文件名,存储层只接受已经确认过的对象 key。原始文件名可以当展示字段保存,但不应该参与真实路径。
r.MaxMultipartMemory = 8 << 20
file, err := c.FormFile("file")
key := uuid.NewString() + filepath.Ext(file.Filename)还要校验 content type 和扩展名,但不要只信任浏览器传来的 header。重要文件最好做魔数识别,图片类文件可以解码一次确认格式。
上传接口的目标不是“能收到文件”,而是保证收到的文件不会污染路径、压垮内存或绕过业务规则。
版权申明
本文系作者 @blogger 原创发布在Gin 上传文件的几个坑。未经许可,禁止转载。
评论
-- 评论已关闭 --
全部评论