一种基于实际活跃任务数的滥用检测方法
从当我看到一堆的 CF-IP 的就知道靠 IP 封禁已经不行了继续讨论:
这个时候就要介绍下一种新的滥用检测方法啦 w
活跃任务检测是一个实时并发请求监控系统,可以追踪用户在一段时间内的并行 API 调用行为。其使用槽位为核心概念来表示和管理活跃任务 w
一个任务槽就代表一个活跃任务
该机制可检测以下行为:
- 共享 KEY
- 自动化脚本
- 资源滥用等
同时又能避免误伤正常使用的用户
对应的数据结构:
type TaskSlot struct {
UserID int
Username string
UpdatedAt int64 // Unix 时间戳
HashPrefix [HashLevelCount][HashPrefixLen]byte // 6级哈希前缀
MaxLevelIdx int // 数据长度对应的最高层级
}
项目采用多级哈希匹配算法对活跃任务实施继承
多级哈希的工作流程:
- 对内容的前 8、64、512、4096、32768、131072 字节计算哈希
- 遇到新请求时,与现有槽位的哈希进行比对
- 如果最高层级往下数 2 个层级能匹配,则继承槽位
- 否则,创建新槽位,并使用 LRU 淘汰旧槽位
这实现了可通过用户的槽位数来代表活跃任务数
最终后台线程会定时将 10 分钟内活跃任务数大于 5 的用户记录下来备查
已在我的二开版本中实现
(目前适配 mysql 和 postgres)