搜索抓取

日志里的蜘蛛 UA 也可能是假的:怎么验证真实搜索蜘蛛

服务器日志里出现一堆自称 Googlebot、Bingbot 的请求,并不代表它们都是真的,UA 只是一段可以随手改写的字符串。这篇文章讲清楚怎么用反向 DNS、官方 IP 段和抽样比对把真假蜘蛛分开,以及验证之后分别该怎么处理,避免误封真蜘蛛或放过伪装流量。

搜索抓取

日志里的蜘蛛 UA 也可能是假的:怎么验证真实搜索蜘蛛

看日志时很容易产生一种错觉:只要 User-Agent 里写着 Googlebot 或 Bingbot,就默认那是搜索蜘蛛。实际上 UA 是客户端自己填的一段字符串,改起来比改浏览器标签还简单。日志里混进伪造的蜘蛛请求,几乎是每个有一定流量的站都会遇到的事。

为什么 UA 不能当作身份证明

HTTP 请求头是客户端自报家门,服务器没有强制校验机制。任何人写个脚本,把 UA 改成 Googlebot/2.1,请求就会以这个身份出现在日志里。

常见的伪装动机有这么几类:

  • 批量扫描漏洞、试探登录路径,用蜘蛛 UA 降低被拦截的概率;
  • 抓取站内内容做镜像或训练数据,伪装成搜索引擎减少被封;
  • 第三方工具做站点体检或压力测试,顺手套了个蜘蛛 UA;
  • 统计报表里凑一个搜索来源,让数据看起来好看。

这些请求对服务器的消耗是真实的:它们占带宽、占连接数,严重的还会挤占真蜘蛛的抓取体验。

验证真蜘蛛的三步

第一步:从日志里取出 IP 和 UA

按 UA 关键字筛选出一批请求,把对应的 IP 列出来去重。不要只凭一条日志下判断,先看整体分布:某个 IP 短时间内请求几百次、并且集中在某几个目录,多半不是搜索蜘蛛的行为模式。

第二步:反向 DNS 查询,再做一次正向确认

用 IP 反查 PTR 记录,看域名是否落在搜索引擎的官方域名后缀下。只做反向查询还不够,因为 PTR 记录本身也可能被伪造;规范的做法是拿反查到的域名再正查一次 A 记录,确认能解析回原来的 IP。这是主流搜索引擎官方推荐的验证思路。

第三步:比对官方公布的 IP 段

Google、Bing 等都会公开蜘蛛使用的 IP 段,并提供可机器读取的列表文件,方便定期拉取比对。把日志里的 IP 与这些网段对照,能快速筛掉明显对不上的请求。注意列表会更新,建议按周或按月重新拉一次,而不是抄下来长期使用。

验证的重点不是每个请求都查一遍,而是找出可疑样本并定期复核。全量校验既费时间,也没必要。

验证结果不同,处理方式也不同

  • 确认是真蜘蛛:不要封。转而关注它的抓取频次、响应时间和状态码分布,看服务器是否拖慢了它。
  • 确认是伪装请求:robots.txt 里的 UA 屏蔽只是君子协定,脚本完全可以忽略。真正起作用的是限速、WAF 规则、按 IP 或 IP 段拦截,必要时在 CDN 层处理。
  • 暂时无法确认:先按普通访客对待,观察行为特征,别急着封整个 IP 段——共享 IP 和云服务出口很容易误伤。

几个容易踩的坑

  • 把 CDN 回源 IP 或反向代理 IP 当成蜘蛛 IP。站点前面有 CDN 时,日志里记录的可能是节点地址,需要先还原真实来源。
  • 只根据 UA 放行某些路径,等于给伪装者开了门。
  • 误封真蜘蛛的 IP 段。一旦发生,表现是抓取量骤降、新页面长时间没人访问,排查起来很费时间。
  • 把访问量大的第三方工具全部当成恶意流量。有些是正常的监控或站长工具,先看请求路径和行为再定性。

把验证做成常规动作

比较省事的做法是固定节奏:每周从日志里抽取一批蜘蛛请求,跑一遍反查与 IP 段比对,记录可疑 IP 的变化趋势。同时盯几个指标——整体抓取量、平均响应时间、5xx 比例。如果抓取量突然下降,先确认是不是自己把真蜘蛛挡在了门外,再去查其他原因。

总结一句:UA 是标签,不是证件。真正能说明身份的,是反向解析和官方 IP 段的交叉验证。把这个动作做熟之后,日志里的真假蜘蛛会变得容易分辨,服务器资源也不至于被白白消耗。