Rails 如何做一个可插拔的内容安全审核系统?

v2up · 2022年09月10日 · 最后由 awking 回复于 2022年09月17日 · 665 次阅读

内容安全审核应该是近几年国内 UGC 产品逃不掉的课题,好像 Ruby China 也经常遇到这样的困扰,刚开始规模影响力不大的时候,人工和简单的规则就可以解决,但稍微上一些量之后,就得考虑用机器预审然后根据情况人工介入,这一点大小厂没啥区别,可能唯一的区别就是精度和打击力度的问题。

既然是个通用课题,我就在想能不能把这个业务抽象成一个相对通用一点的 Gem 包,之前用过@huacnleeaudit-logexception-track,以及 ankane 的blazer感觉非常简单实用,而且还方便复用在不同项目上,只需要按说明配置参数根据约定使用就能直接轻松集成到现有的应用中还不影响到其他业务。

初步的思路是直接基于云服务商提供的各种内容安全审查 API 做整合,重点把调用流程和管理部分做好,尽可能的简单通用,大概 3 个部分:

  • 检测,类似 pundit 中的 authorize User 这种显示调用,放在 UGC 提交之后,保存之前。
  • 报警记录,触发规则或被拦截之后,记录好参数信息、用户信息,给到相应通知。
  • 管理,基于报警记录,人工检测核对问题内容,做出类似忽略、隐藏或者删除等操作。

大概想到这么多,不知道大家是怎么搞定这个问题的?

抛砖引玉了

安全检测内容一般是 文本 图片 视频 音频。

检测方式分为同步与异步。其中文本最常用,可以采用同步。

  • 1. 对于文本,可以写成同步检测
validates :body, security: true 

对于其他富文本的内容,写成异步形式,等待云服务器的回调,异步检测

  • 2. 报警记录

同步 validates 记录一下

回调的时候记录一下,总共两个地方记录。

或者每检测一次发布一个事件通知,统一记录统计分析。

  • 3. 管理

封禁 帖子、封禁群组、封禁人、封禁所有或者解封。这个和业务具体相关了。

提前积累一些关键词会很有用处。

行业里的一些专用词,可以加入到厂商白名单。

2 楼 已删除
awking 回复

巧了不是 都是自己人呀

jicheng1014 回复

自己人

需要 登录 后方可回复, 如果你还没有账号请 注册新账号