Oss内容审核 异步检测回调 golang实现
之前一直用阿里的oss做图片存放的地方,而且性价比还挺高滴,不过比较麻烦的一点就是我们还是依赖内部人工审核才会外放出图片去,这就造成了人力成本激增,所以还是打算接入oss上面的机审。
首先还是需要熟悉一下oss的文档:https://help.aliyun.com/document_detail/199643.html,里面其实是有一些表述不清楚的地方,所以还是需要记录一下:
来看看文档给的步骤:
打开阿里云控制台 -> 内容安全 -> oss违规检测,可以按照业务需求,选择是增量扫描还是存量扫描。
因为oss内容检测需要一个接受回调的接口,阿里云审核完内容之后会给我们回调,我们需要配置回调通知:https://help.aliyun.com/document_detail/70436.html
配置完之后,这个方案在列表页面会自动生成一个seed值,这个seed值比较关键,类似于加密秘钥,是用来校验内容,防止被篡改内容。这里可以选择sha256,或者国密sm3。
然后按照文档的uid+seed+content进行解密对比就可以了。一开始找了半天seed值都不知道在哪,就是在配置通知之后显示在配置的通知列表里。
然后就是我们的接口编写了,这里用的框架是gin,其他也差不多,大同小异,这边勾选的加密算法是SHA256,所以我们就需要用sha256进行加密对比:
// @Summary oss callback // @Schemes // @Description oss callback // @Tags oss // @Param input body model.OssForm true "input" // @Accept json // @Produce json // @Success 200 {string} OssCheckCallback // @Router /oss/callback [post] func OssCheckCallback(g *gin.Context) { var ossInput model.OssForm if err := g.ShouldBind(&ossInput); err != nil { g.JSON( http.StatusBadRequest, gin.H{"msg": err.Error()}, ) return } config := commons.GetConfigJson() if config == nil { g.JSON( http.StatusBadRequest, gin.H{"msg": "配置错误"}, ) return } flag := CheckCheckSum(config.OssConfig.UserId, config.OssConfig.Seed, ossInput.Content, ossInput.CheckSum) if !flag { g.JSON( http.StatusBadRequest, gin.H{"msg": "签名错误"}, ) return } // 这里是收到回调之后的处理逻辑,随意编写 g.JSON(http.StatusOK, gin.H{"msg":"success"}) }
校验签名的方法:
func CheckCheckSum(userid string, seed string, content string, checksum string) bool { flag := false data := userid + seed + content sign := Sha256(data) if sign == checksum { flag = true } return flag } func Sha256(src string) string { m := sha256.New() m.Write([]byte(src)) res := hex.EncodeToString(m.Sum(nil)) return res }
这样就完成了对callback的校验,至于收到回调之后的逻辑,就看大家的业务需求了
如有错误,欢迎指正,互相学习。谢谢!