凌晨三点,网站服务器监控群突然炸出一串红色警报。遭遇一台刚上线两周的爬虫电商站,CPU跑满,攻击带宽飙到套餐上限,网站后台日志里同一个IP段每秒请求四百多次。遭遇这不是爬虫正常用户,是攻击爬虫。
很多人第一反应是网站加防火墙规则,封IP。遭遇有用,爬虫但只管几个小时。攻击对方换一批代理池,网站继续来。遭遇爬虫攻击和普通CC攻击不一样,爬虫它不追求瞬间打死你,而是持续薅数据、压接口、拖慢数据库。你封得越狠,对方换得越勤。
我见过一个做机票比价的站点,被爬虫盯了整整一个月。技术团队一开始用Nginx限流,单IP每分钟60次请求。结果爬虫把请求分散到两千多个IP,每个IP每分钟只发十几次,限流形同虚设。后来他们换了思路,不再只看IP,而是看行为特征。正常用户查航班,会点开详情、比价格、停留几秒;爬虫拿到JSON就直接走,间隔均匀,User-Agent还经常是空的。
判断爬虫,几个信号很直接:
- 请求间隔像机器一样精确,比如固定0.5秒一次;
- 只访问数据接口,不加载CSS、JS、图片;
- 同一套参数反复组合,比如日期从早到晚遍历;
- Cookie要么没有,要么每次都是新的。把这些特征丢进WAF或者自己写个中间件,命中两条以上就丢进验证码队列。别小看验证码,大部分低级爬虫直接死在这一步。高级爬虫能打码,但成本立刻上去,很多小团队就放弃了。
还有一个坑:别只防入口。数据库慢查询往往是爬虫拖垮的。有次帮人看一个论坛,爬虫专爬搜索页,每个请求都触发全表LIKE。表面QPS不高,但数据库连接池十分钟就满了。解决办法不是封爬虫,是给搜索加缓存,或者限制搜索频率。爬虫再快,也快不过Redis。
如果爬虫已经进来了,先别急着删日志。把最近两小时的访问记录拉出来,按IP段、User-Agent、请求路径做聚合。你会看到几个明显的簇。挑最大的那个簇,分析它请求的规律。有时候对方只爬某个分类下的商品,你就给那个分类加个动态token,前端每次刷新都变。爬虫拿不到新token,请求全返回403。
说个真实案例。一个做房产数据的网站,被爬虫抄走了全部挂牌信息。他们后来在列表页每个房源ID后面加了一个时间戳签名,服务端校验签名有效期只有30秒。爬虫批量抓取时,签名早就过期了。正常用户翻页慢,完全没影响。这招比封IP管用得多,因为对方要破解签名,就得逆向JS,成本翻几倍。
最后,别忽略robots.txt和协议声明。虽然拦不住恶意爬虫,但能区分善意爬虫。Google、Bing这些搜索引擎的爬虫,你封了反而影响收录。在WAF里给已知搜索引擎IP段开白名单,剩下的按行为打分。分数低的直接返回429,分数高的放行但限速。
爬虫攻击没有一劳永逸的解法。今天封了代理池,明天对方换住宅IP。核心思路是提高对方的成本:加验证、加签名、加行为检测。让爬虫每抓一条数据,都要多花几倍力气。大部分攻击者算完成本,就换目标了。
顶: 8踩: 839






评论专区