SEO 百科
用户代理伪造
本页目录
用户代理伪造
用户代理伪造,指请求方冒用其他爬虫的名字,把它填进 User-Agent 报头,让网站误认成搜索引擎[1]。做 SEO 的人要关心它,因为不少防护规则只看这一串字符就决定放行或拦截。一旦规则被利用,假爬虫照旧抓走内容,真爬虫却可能被挡在外面。分清用户代理只是自报,不成其为身份证明,是配置抓取规则前的第一步。
用户代理字符串可以随便写
User-Agent 属于 HTTP 请求报头,客户端自己填,服务器只负责读。它没有任何签名或密钥,谁都能照抄。
Bing 在 2006 年说明了这一点:任何人都能自称 MSNBot,并随意抓取[1]。百度也提醒站长,要防止有人恶意冒充 Baiduspider 频繁抓取网站[3]。
真爬虫确实会用自己的名字。Google 的常见抓取工具都带 Googlebot 字样[2],百度把网页搜索、图片搜索、视频搜索分成不同的用户代理[3]。名字对得上,只能说明对方愿意这么自称。
只凭用户代理挡不住假爬虫
一条规则写成“用户代理含 Googlebot 就放行”,等于放行任何自称 Googlebot 的请求。采集程序抄一段字符,就能享受和真爬虫一样的待遇。
反过来写“用户代理含 Googlebot 就拦截”,误伤同样成立。真 Googlebot 的请求也带着这串字符,一起被拦下,抓取和收录都会受影响。
真正能区分身份的是 IP 与域名的对应关系。Google 的做法是:先反查 IP 得到主机名,再正查主机名,确认指回同一个 IP[2]。Bing 的核对方式是看主机名是否以 search.msn.com 结尾[1]。核对落在 IP 上,用户代理只当线索。
# 一个自称 Googlebot 的请求,用户代理长这样
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
# 只看用户代理无法判断真伪,要拿来源 IP 做反向 DNS 核对
host <这个请求的来源 IP>
误伤真爬虫的常见做法
以下几条规则看起来能挡住假爬虫,风险却都落在真爬虫身上:
- 按用户代理整段匹配后直接拒绝,拼写或版本变化就会漏放行;
- 把某个固定的 IP 段写进拦截名单,引擎换机器后新地址被误挡;
- 用统一的频率上限对待所有抓取,真爬虫密集抓取时被限速;
- 依赖第三方名单,名单滞后时真抓取收不到响应。
Google 提醒,若担心他人冒充 Google 访问网站,应核对请求是否真来自 Google[2]。判断依据要落在可以核对的证据上。
常见误用
一个误用是把用户代理当成身份证明。它只是自报,冒充成本极低。
另一个误用是只按用户代理决定收录规则。比如给自称 Baiduspider 的请求开放全部内容,却不知道其中混着采集程序。
还有一种误用是发现某段用户代理请求异常,就把它整个封掉。真爬虫和假爬虫共用同一段字符,封掉之后收录下滑才追查,损失已经发生。
稳妥的顺序是先做 IP 与域名的核对,把结果写成白名单,再对名单之外的请求按频率和页面范围做限制[1]。
附录
参见
参考资料
官方(境外)
- 《Search robots in disguise》,Bing Search Blog,2006-11-29。
- 《Google 抓取工具和抓取器(用户代理)概览》,Google 搜索中心,2025 更新。
官方(国内)
- 《Baiduspider》,百度。
外部链接
无。