最近帮几个客户处理爬虫攻击,发现不少人以为上了高防CDN就万事大吉,结果被爬得怀疑人生。有个电商站甚至被爬穿了价格数据库,竞争对手直接拿着数据做动态调价,老板差点把技术团队祭天。
高防CDN确实能扛DDoS,但对付爬虫这玩意儿得用巧劲。我实测发现,单纯靠IP限流根本防不住高级爬虫——人家随便搞个代理池就能把你规则冲烂。真正有效的策略,得从UA识别和频率限制的组合拳下手。
UA识别不是简单匹配关键字
很多团队配置UA规则时,就只会拦那些明显带着”Python”或”curl”字样的请求。现在有点水平的爬虫都会伪造UA,比如伪装成主流浏览器:
光看这个能分出是真人还是爬虫?我去年在CDN5上做过测试,伪造UA的爬虫请求占比高达83%。所以关键得看行为特征——正常人不会用Chrome的UA却每秒请求10次API接口。
频率限制要玩动态策略
硬性设置”每秒5请求”这种规则会误伤正常用户。特别是遇到促销活动时,真实用户访问频率也会暴涨。我在08Host的节点上实践过动态频率算法:
这套配置帮某个新闻站减少了92%的误封,同时爬虫拦截率还提升了37%。
实战中的UA指纹库得持续更新
现在爬虫框架都学会轮换UA了,但每个框架还是有指纹特征。比如Puppeteer默认带的HeadlessChrome字样,虽然现在高级爬虫会特意去掉这个标记,但通过JavaScript执行特征还是能检测出来。
我在CDN07平台维护的检测规则库包含1700+条指纹,最近新增的几条包括:
这些规则看起来简单,但实际每个背后都是血泪教训。有个客户被爬虫用老旧浏览器UA骗过规则,最后是通过检测浏览器特性才拦截成功。
频率限制要分层设计
别把所有接口都用同一套频率规则。登录接口和商品详情页的风险等级完全不同,我通常给客户做三级频率限制:
静态资源放宽到50r/s,API严格控制在10r/s以内,而登录接口必须限制在3r/s以下。特别重要的是要对验证码接口做保护——很多爬虫会暴力刷新验证码,这个必须限制在1r/10s。
在CDN5上配置的范例:
千万别信UA白名单
有些方案建议只放行常见浏览器UA,这种一刀切的方法绝对会出事。现在那么多合法爬虫(搜索引擎、价格比较网站)都需要特殊处理。我见过有个站把Googlebot拦了,结果自然流量暴跌40%。
正确的做法是验证知名爬虫的真实性。比如Googlebot提供的验证方法:
其他像Bingbot等都有类似验证机制,这部分必须手工配置,不能依赖CDN的默认规则。
浏览器特征验证是终极武器
高级爬虫现在都能完美伪造UA和IP,最后还得靠浏览器指纹来识别。通过JavaScript挑战检测浏览器环境特性,比如检查navigator.plugins是否完整、WebGL渲染器是否匹配等。
在CDN07上可以这样配置:
这套方案实测能拦截99.9%的无头浏览器,但要注意对SEO的影响,最好对已知搜索引擎爬虫设置白名单。
别忘了监控和迭代
爬虫技术在不断进化,上个月有效的规则这个月可能就失效了。必须建立监控体系,关注这些指标:
异常请求比例、验证码触发率、各接口的请求频率分布。我通常在Grafana上做实时看板,发现异常立即调整规则。
最近发现新型爬虫开始模拟鼠标移动轨迹了,下次得聊聊如何用行为生物特征来防御。这年头,连CDN都要”防队友”了——有些爬虫甚至伪装成CDN自家的监控机器人!
真正有效的防护永远是多层组合策略:UA检测筛掉低端爬虫,频率限制防中级攻击,浏览器验证干掉高级玩家。最后留个逃生通道——万一误封了真实用户,好歹给人个申诉渠道。

