搜索抓取

WAF、限速与蜘蛛抓取:站点防护误伤爬虫时怎么排查

蜘蛛请求被 WAF 或限速规则拦掉时,日志里可能只留下 403 和 429,抓取量却悄悄下滑。本文整理误伤的常见来源、如何验证来访者是否是真蜘蛛,以及按 IP 段放行时的注意事项和放行后该观察哪些信号。

搜索抓取

WAF、限速与蜘蛛抓取:站点防护误伤爬虫时怎么排查

很多站长排查抓取问题时,会把注意力放在 Sitemap、内链和响应时间上,却忽略了一个更前置的环节:请求根本没到站点程序,就被 WAF、限速或防火墙拦掉了。蜘蛛拿到的是 403 或 429,而你在应用日志里什么都看不到。

被拦截时的典型表现

  • 服务器访问日志里,来自已知爬虫的请求大量返回 403、429,或者干脆没有记录,只在 WAF 日志中出现;
  • 某个时间点起抓取频次断崖式下降,但站点内容和内链结构并没有改动;
  • 抓取统计与自家日志对不上,Sitemap 长时间停留在“已提交未抓取”;
  • 只有带参数的 URL 被拦,首页和静态页正常,这类情况通常是规则命中了查询字符串。

误伤一般来自这几个地方

WAF 的通用规则集

多数 WAF 默认规则会拦截含 SQL 关键字、脚本片段、超长参数或特殊字符的请求。而站点的筛选参数、搜索页 URL、老版本 CMS 的路径里,恰好可能包含这些字符串,蜘蛛抓到这些 URL 时就会被一并拒掉。

频率限制与 CC 防护

蜘蛛抓取本身就是短时间内的大量请求。如果限速策略只按 IP 计数、不区分来源,专业爬虫很容易被当成攻击流量。反过来,有些站点为了“防采集”把阈值调得极低,正常访客滑动列表也会触发拦截。

User-Agent 黑名单

UA 字符串可以被任意伪造,用黑名单去拦爬虫既拦不住恶意采集,又容易误伤:部分防护产品的 UA 库更新不及时,会把新版爬虫标识当成可疑对象。而用 UA 做白名单同样不可靠,攻击者复制字符串就能绕过。

先确认是不是真蜘蛛,再谈放行

不要只看 UA。更稳妥的做法是核对请求来源 IP 是否属于搜索引擎官方公布的 IP 段,或者对 IP 做反向 DNS 查询,确认主机名归属后再正向解析回去,两者能对上才可信。同时把 WAF 日志、服务器访问日志和抓取统计数据放在一起对照,看被拦的路径是否集中在某几类 URL 上。

放行之前先验证身份,放行之后保留其他防护——按 UA 白名单开口子,等于给所有伪造者开门。

放行时要注意的几件事

  1. 按官方 IP 段放行,而不是按 UA 字符串放行,并定期更新 IP 段列表,搜索引擎偶尔会调整出口地址。
  2. 对已验证的爬虫单独设置限速阈值,与普通访客、可疑流量分开计数,避免一锅端。
  3. 只对确认为误伤的规则做例外,不要为了让蜘蛛通过而整体关闭 WAF。
  4. 保留 403、429 的日志记录,出问题时才能回溯是哪条规则先动的。

放行之后观察什么

调整后不要马上认为问题解决。接下来几周留意三个信号:访问日志中爬虫请求的状态码分布是否回到以 200 为主;抓取总量是否逐步回升而不是一次性暴涨;Sitemap 与重点目录的抓取频次是否恢复。如果抓取量回来了,但深层页面仍然很少被访问,那问题可能已经不在防护层,而要回到内链结构和抓取路径上继续排查。

站点防护和蜘蛛抓取并非天然对立。把验证做扎实、把放行范围收窄到可确认的身份上,既能挡住恶意流量,也不会把自己的抓取通道一起堵掉。