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(),
})
}))