01.基础文件上传案例
文件上传漏洞是指在Web应用程序中存在不恰当的文件上传验证或过滤,导致攻击者可以上传恶意文件或非法文件类型,从而执行远程代码、获取敏感信息或实施其他攻击。常见的攻击或绕过方式有:上传恶意文件、绕过文件类型限制、上传恶意图片、文件覆盖、目录遍历、文件解析漏洞等。
该案例实现了一些基本的文件上传安全措施,如检查文件是否成功获取、检查文件名是否为空、使用临时文件进行文件处理。
#
示例代码:r.Handle("/upload/case/safe", http.HandlerFunc(func(writer http.ResponseWriter, request *http.Request) { fp, header, err := request.FormFile("filename") if err != nil { Failed(writer, request, "Parse Multipart File Failed: %s", err) return } if header.Filename == "" { Failed(writer, request, "Empty Filename") return }
fn := header.Filename
ext := fn[strings.LastIndexByte(fn, '.'):] tfp, err := consts.TempFile("temp-*.txt") if err != nil { Failed(writer, request, "Create Temporary File Failed: %s", err) return } io.Copy(tfp, fp) tfp.Close() unsafeTemplateRender(writer, request, string(uploadResult), map[string]any{ "filesize": utils.ByteSize(uint64(header.Size)), "originName": fn, "handledExt": ext, "path": tfp.Name(), }) }))