文件上传接口看起来简单,实际风险集中在三个地方:文件大小、文件名、存储路径。只用 SaveUploadedFile 很容易把用户输入带进文件系统。

入口层要限制 body 大小,业务层要重新生成文件名,存储层只接受已经确认过的对象 key。原始文件名可以当展示字段保存,但不应该参与真实路径。

r.MaxMultipartMemory = 8 << 20
file, err := c.FormFile("file")
key := uuid.NewString() + filepath.Ext(file.Filename)

还要校验 content type 和扩展名,但不要只信任浏览器传来的 header。重要文件最好做魔数识别,图片类文件可以解码一次确认格式。

上传接口的目标不是“能收到文件”,而是保证收到的文件不会污染路径、压垮内存或绕过业务规则。

分类: Gin 实战 标签: Gin 文件上传 安全

评论

-- 评论已关闭 --

全部评论