再战图床“天王山”

在被盗刷一个月付出百万代价下使用的业务方受不了改成内网写,图片服务接口封禁了外网上传,黑产可能也没有想到“快乐”的清明节后“福报”来得这么快,也间接证明了“钱多能使磨推鬼”,不是不干,只是损失的钱没有达到“肉疼”线!~
封禁并不是结束
图片服务封禁外网上传后黑产无法上传新的图片,CDN域名带宽还是居高不下,每天损失几万块,需要进行一下处理。鉴于之前研究过这些伪装图片(可以看之前我写的几篇文章),提了一个快速的解决方案:
- 先获取这些图片CDN域名的每天带宽峰值,取出峰值时间点的CDN访问日志,从中取出图片资源的具体URL
- 把上面的结果和业务落地页中用到的对比,然后从s3中取出资源来进行binwalk判断,存在视频数据的图片认为是黑产图片记录到待删列表里面
- 处理完成后调用图片服务的删除接口删掉黑产图片,最后刷新一下这个删掉图片的CDN缓存
方案验证过是可行并且有效的,可以多找几台机器同时处理。
职场”不粘锅“
这个图片服务交接给了基础架构组,这几天他们推进了业务方调用图片服务从外网写转内网写,封禁完后业务方要求对这个CDN带宽高的问题做处理。基础架构秉持的原则是不动业务方的数据,不管是业务自己传的还是黑产传的,要删除只能业务自己处理,怎么识别黑产图片和删除并没有去研究方案,这~~。和业务方一起沟通了一下,如果业务方做这个需要了解黑产图片识别、图片删除、CDN日志下载和缓存刷新,就算安排人短时间内也无法熟悉,当前紧急要做的是降低CDN带宽流量,减少盗刷损失。之前只有我做过相关方面的工作,这次我也承担下来。
从我个人角度看,不帮业务删黑产数据也符合职责范围,但是不提供任何解决方案,只是把本组摘得干干净净,没有给业务“赋能”,也没有给业务减少盗刷损失,这种职场“不粘锅”的属性让业务方不认可,后面还怎么推荐业务方用自己开发的工具呢???
以上只是我个人看法,不针对任何人或组,不喜勿喷!
快得不是一点
说干就干
获取CDN日志,取出图片资源地址写到file_list(这个里面是类似https://oimage**com/image?id=8378932243115227661&product=xue&format=PNG这样的地址),业务方给的落地页用的图片资源id写到cms_id_list(这个里面是ID 8378932243115227661、8378932243115227662 ,),两者要进行一个对比,取出id不在cms_id_list里面的图片id,好方便去s3中拿出来并进行检测。
刚开始打算直接用shell脚本,使用grep -q来处理匹配关系,脚本如下所示,好处就是快捷,坏处就是慢,一个CDN带宽波峰时间点的日志整个统计去重后也有上百万的图片url,使用这个脚本要40分钟才能结束,😦!
for j in `cat file_list`;do
pngid=$(echo $j |awk -F '[=|&]' '{print $2}')
if grep -q -- $pngid cms_id_list;then
:
else
echo $j >> del_png_list
fi
done
如果放到内存里面去匹配应该很快,前同事洋洋推荐放到Python里面处理,一个列表上百万不知道能不能装得下,查了一下放百万元素真不是个事儿。
1、32位python的限制是 536870912 个元素。
2、64位python的限制是 1152921504606846975 个元素。
换用Python来实现:
#!/usr/bin/env python
import sys
import re
result = []
result1 = []
result2 = []
with open('./file_list') as f:
lines = f.readlines()
for line in lines:
result.append(line.strip('\n'))
with open('./cms_id_list') as f:
lines = f.readlines()
for line in lines:
result1.append(line.strip('\n'))
for i in result:
ids = re.split('id=|&',i)[1]
if ids not in result1:
result2.append(i.strip('\n'))
with open('del_png_list', 'w') as filehandle:
for listitem in result2:
filehandle.write(f'{listitem}\n')
运行速度上,115W数据对比处理只需要36.5秒,速度逆天了。

结果立竿见影
取了五天CDN带宽波峰日志处理了累计350W黑产数据,带宽下降明显,赢下了图床“天王山”之战!

写在最后

有时候工作交接不清楚并不是“不粘锅”式傲慢的理由,先快速减少损失,后期的复盘再明确工作分工也不是不可以。