站点运营

站点运营:驗證爬虫身份,別把 UA 字符串当成通行證

服務器的訪問日誌里,UA 寫着 Googlebot 的請求未必真来自搜尋引擎。本文整理几種驗證爬虫身份的常用做法,包括反向 DNS、官方 IP 段和行為特征,並给出誤伤與放行之間的取舍思路,帮助站点在拦截恶意請求的同时,別挡掉真正的搜尋蜘蛛。

站点运营

站点运营:驗證爬虫身份,別把 UA 字符串当成通行證

做站点运营,服務器日誌里總會出現各種自称是搜尋引擎爬虫的請求。UA 字符串是最容易伪造的部分,任何脚本都能把它寫成 Googlebot 或 Baiduspider。如果僅凭這一点就放行或拦截,要么给恶意抓取開了门,要么把真正的搜尋蜘蛛挡在门外。

只看 UA 會踩哪些坑

常见的情况有两類。一類是采集脚本伪装成搜尋引擎爬虫,绕開频率限制,把頁面成批抓走;另一類更麻烦:站長為了防采集,在服務器或 WAF 里直接封禁包含某個 UA 關鍵詞的請求,结果誤伤了正常的搜尋蜘蛛,抓取量掉下来,却一时找不到原因。

  • UA 可以随意修改,没有校驗机制,不能作為身份凭證。
  • 搜尋引擎的爬虫 UA 通常是公開的,寫進規則里等于公開了绕過方式。
  • 不同搜尋引擎、不同抓取用途,比如图片和移動端,可能使用不同 UA 和 IP。

几種可用的驗證手段

反向 DNS 驗證

主流搜尋引擎一般會提供反向 DNS 查询:把訪問来源 IP 做一次反解,得到的主机名應当落在官方域名下;再對该主机名做一次正向解析,確認能回到同一個 IP。两次解析都吻合,才能說明這個 IP 属于该搜尋引擎。關键在于正反都要查,只做反向解析同样可能被人构造。

官方 IP 段與公開列表

部分搜尋引擎會公布自己的 IP 段,或提供可下载的列表。定期拉取並更新到防火墙、限流規則里,比在代碼里寫死一段 IP 更稳妥。注意這些列表會變,维護動作要放進日常巡检,而不是配置一次就放着不管。

行為特征

真實搜尋蜘蛛的訪問通常有迹可循:請求路径分布相對分散,對 robots.txt 和站点地图有一定關注,單 IP 的並發不會高到离谱。反過来,短時間集中抓取某個目錄、只請求列表頁不請求詳情、並發數稳定得像脚本,這些都值得多看一眼。行為特征适合做辅助判断,不适合單獨作為封禁依據。

誤伤與放行之間怎么取舍

驗證的成本通常比誤封低。多數情况下,宁可對可疑請求限速、加驗證,也不要一刀切封禁整個 UA 段。

一個務實的顺序是:先確認身份,再决定策略。身份明确的搜尋引擎 IP,给正常抓取预算;身份不明但請求特征温和的,限速观察;身份不明且行為激進的,才考虑拦截或加驗證。把 限速 作為預設動作,比直接拒绝更容易在安全和收錄之間取得平衡。

落地时可以這样做

  1. 在日誌里固定记錄来源 IP、UA、請求路径和响應碼,便于回溯。
  2. 對声称是搜尋引擎的 IP 做反向 DNS 校驗,校驗结果落库或缓存,避免每次請求都實时查询。
  3. 定期更新官方 IP 段列表,寫進服務器或 CDN 的訪問控制規則。
  4. 對未通過校驗的請求先限速,观察一段時間再决定是否拦截。
  5. 保持 robots.txt 和站点地图可訪問,別让正常的爬虫在门口就被挡下。

小结

驗證爬虫身份不是要把每一個請求都查個底朝天,而是把谁在抓、抓得是否合理這件事變得可判断。UA 字符串只能当作线索,不能当作通行證。把反向 DNS、IP 段和行為特征组合起来用,再配合限速而不是直接封禁,站点在服務器维護和抓取治理上會從容很多。

需要提醒的是,任何驗證手段都只是降低誤判概率,不是绝對保險。規則上线後,记得對照日誌看抓取量的變化,發現異常及时回滚。