awk 统计日志中的ip和userId--分析用户恶意刷接口行为

4 篇文章 0 订阅
4 篇文章 0 订阅

前段时间公司的领券接口,被人恶意盗刷,于是基于之前写的 redis的时间窗口限流功能,进行改进,同时支持可以针对ip  用户id 规则 动态可配置的流控黑名单拦截器,并对领券接口设定每秒钟请求超过5次,会把该用户加入黑名单一定的时间,前期一天能拦截几万次的请求,每个用户的请求qps 达到几百次,限流拦截后,后来就慢慢正常了。这两天接到反馈说配置了总可领取量为60的某个券,甚至没投放就几乎瞬间秒没,排查后发现,用户已经聪明的避开了限流规则,都没有命中限流加入黑名单规则,于是只能先导出请求的日志,进行分析。。。

导出后每条请求日志格式如下第一条:

命令:

cat tf2.text |  awk -F "请求头:" '{print $2}' | awk -F ',' '{a[$5]++}  END{for(i in a)print i "-->"  a[i]}'

说明:

-F "请求头:" 

        -F 文本分割的标识,表示以  "请求头:" 进行分割,这样就把日志以"请求头:"分割成两段,很明显,第二段是我们需要继续去分析的,所以输出第二段 '{print $2}'

'{print $2}'

        表示输出分割后的第二段内容,即截图中的下面那段内容

awk -F ',' 

因为我们要统计第二段内容中的ip和userid,所以我们需要继续分割,由文本可知,第二段可以根据 "," 进行分割,所以继续 标记分割  awk -F ','  , 如此分割后,则第二个会形成一个以逗号,分割而成的数组

'{a[$5]++}  END{for(i in a)print i "-->"  a[i]}'

$5表示取以逗号分割后的第五个字段,即期望统计的"x-original-client-ip":"60.205.226.35",

{a[$5]++}中,a是随意定义的数组变量名称,这个名称可以随意定义,{a[$5]++}表示取第5个字段放到数组中,如果第五个字段值相同,则加1。

END{for(i in a)print i "-->"  a[i]} ,END 表示统计结束,

{for(i in a)print i "-->"  a[i]} 表示统计结束后,遍历数组a,并输出  数组的遍历数据及对应的统计数量

统计结果

 同理找到用户的userId,进行统计

cat tf2.text |  awk -F "请求头:" '{print $2}' | awk -F ',' '{a[$15]++}  END{for(i in a)print i "-->"  a[i]}'

综上分析, 

该盗刷接口者一秒钟更换ip 20多个,用来刷券的用户600多个,请求1600多次,近20秒内ip 600多个,用户仍为600多个,每个用户的请求基本都在5个以下,完美避开规则,真是道高一尺魔高一丈。。。。

后续计划:

1、会逐步分析这些用户,看是否必要直接加入黑名单

2、目前券id为默认自增,不排除用户直接撞券的可能,这个风险也要规避(可以设置自增id自定义规则,也可以给每张券设置一个秘钥,领券的同时,必须携带秘钥才可)

3、若基于2可以防止用户撞券,但是在券正常营销曝光后,用户拿到数据采取看似正常用户行为规则进行盗刷,如何风控,这是一个更复杂的问题,可能就需要综合分析该用户的行为和画像了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值