良性与恶意机器人:先分类,再拦截
一个 IP 在 10 分钟内请求 600 个页面。如果是价格采集器,你会想阻止它。如果是正在发现新站点地图的 Googlebot,拦截可能使数千产品延迟索引。行为看起来同样“快”,运营决策却相反。
仅靠用户代理、速度或 JavaScript 支持,无法区分良性与恶意机器人。要回答三个问题:它是谁、在做什么,以及造成什么影响?
良性、恶意和身份未明的机器人
良性机器人
良性机器人服务于网站接受或能从中受益的目的:
- 搜索引擎抓取工具;
- 你配置的链接、可用性或安全监控;
- 社交分享预览抓取工具;
- 获授权的无障碍或存档服务;
- 按协议运行的合作伙伴 API 客户端。
良性不意味着不受限制。Googlebot 的自动抓取遵守 robots 规则;你的监控仍应有端点和速率边界。
恶意机器人
恶意自动化会造成损害,或违背网站用途进行访问:
- 欺诈性广告点击;
- 价格、内容或客户数据采集;
- 撞库和密码攻击;
- 批量建号、表单垃圾提交或占库存;
- 漏洞扫描;
- 污染分析数据的假流量。
身份未明的机器人
这通常是最大的一组:SEO 工具、移动应用、无头浏览器、测试代理或新 AI 服务。立即拦截可能破坏集成;无限制访问则会带来风险。
对于这一组,限速和观察通常优于二元决定。
用户代理不是身份证明
一个请求写着:
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
这并不能证明它来自 Google。任何脚本都能复制这段文字。
Google 建议:
- 反向 DNS 应返回有效的 Google 自有主机名,正向 DNS 应解析回同一 IP;
- 将来源 IP 与 Google 公布的抓取工具范围比较。
只按用户代理加入允许列表,会招来冒充。只按用户代理拦截,则会漏掉伪装浏览器的机器人。
机器人分类的信号矩阵
没有单一信号是完美的。应组合多个信号:
| 信号 | 问题 |
|---|---|
| 网络身份 | 住宅、数据中心、VPN、Tor,还是已验证抓取工具范围? |
| 用户代理 | 是否与 TLS 指纹和行为一致? |
| 访问速率 | 每分钟、五分钟和每小时请求数? |
| 导航 | 是否加载 HTML、CSS、图片和正常路径? |
| 行为 | 是否有自然的滚动、点击、聚焦、阅读时长和切换? |
| 目标 | 公开内容,还是登录、结账和表单端点? |
| 影响 | 资源成本、分析失真或广告损失? |
合法抓取工具可能很快,同时身份已验证、遵守 robots,并聚焦公开内容。采集器可能自称 Chrome,却跳过资源、轮换 IP,并只采集产品。
六种可疑行为模式
1. 高速访问但没有人类节奏
数百次点击精确间隔 200ms,不太可能来自人类。合法抓取工具也很快,因此要把访问速率与身份及目标 URL 结合判断。
2. 请求只聚焦具有业务价值的端点
??????????????????????????????????????????????????????????????
3. 指纹与用户代理不一致
用户代理自称 iPhone 上的 Safari,而 TLS、标头顺序或视口却类似桌面无头 Chromium。这种不一致比用户代理文字本身更有用。
4. IP 轮换,但设备证据不变
住宅代理让自动化能够更换地址。如果 Cookie、指纹、行为和目标反复出现,逐个 IP 拦截就会永无止境。
5. 从不加载辅助资源
浏览器通常会获取所需 CSS、JavaScript、字体和图片。简单采集器可能只请求 HTML 或 API。缓存和隐私工具使这只能作为辅助信号,而非证据。
6. 失败后沿列表继续尝试
连续尝试用户名、优惠券、卡数据或管理路径,会暴露自动化。单纯 IP 限制无法应对分布式机器人;应纳入账户、指纹和动作维度。
避免用粗放规则拦截良性机器人
拦截全部数据中心
许多恶意机器人使用数据中心,但监控、webhook、搜索抓取工具和企业服务也一样。这可能适合敏感的优惠券操作,却不适合整个公开网站。
拦截每个快速客户端
搜索抓取工具和可用性监控会发送合法的突发请求。速率限制应反映端点敏感性和已验证身份。
到处要求 JavaScript 挑战
搜索抓取工具能渲染部分 JavaScript,但反机器人挑战、强制 Cookie 和 CAPTCHA 可能阻碍发现。重要公开内容需要为已验证抓取工具提供顺畅路径。
永远信任旧允许列表
IP 范围、服务和业务需求都会变化。每个允许列表条目都需要来源、负责人、复查日期和使用日志。
按风险制定响应策略
等级 1:允许并记录日志
适用于已验证抓取工具、自有监控和已知合作伙伴。私有区域仍须身份验证;“良性机器人”并不等于授权。
等级 2:温和限速
适用于读取公开内容、身份未明的自动化。超过阈值时返回 429 和 Retry-After,而不是因一次短暂高峰永久封禁。
等级 3:挑战或降低能力
适用于中等风险行为:快速搜索、反复建购物车或提交表单。引入 JavaScript 检查、基于阈值的 CAPTCHA,或减少返回数据。
等级 4:拦截
适用于撞库、漏洞利用尝试、已确认垃圾提交、有证据支持的点击欺诈,或高质量拒绝列表匹配。
等级 5:调查并保存证据
对持续广告欺诈或攻击活动,保留请求 ID、时间戳、IP 哈希、用户代理、指纹、广告活动和动作。避免保存超出需要的个人数据;目标是可复现的决策。
对不同访问面采取不同保护
内容与 SEO 页面
允许已验证抓取工具,积极使用缓存,对身份未明的自动化限速,并监控采集。不要在需要索引的文章或分类前设置 CAPTCHA。
登录和密码重置
按账户和 IP 限制,检测用户名列表,使用 MFA,并对失败高峰告警。使用住宅 IP 的机器人仍可通过动作模式识别。
线索表单
蜜罐、最短完成时间、服务器验证和速率限制能减少垃圾提交。仅靠 CAPTCHA 不足以应对有人协助的机器人农场。
结账与优惠券
跨账户、设备、卡和优惠券跟踪操作速率。数据中心屏蔽可能有用,但可能需要为企业客户设置例外。
广告落地页
记录广告活动、点击 ID、时间戳和质量分数。比较广告网络点击、会话、日志和转化。财务排除需要比单个可疑请求更强的证据。
调查 IP 或指纹
- 使用 IP 检查器对地址分类。
- 如果它声称是大型抓取工具,验证反向 DNS。
- 提取 5–30 分钟窗口内的动作序列。
- 比较用户代理、标头、指纹和资源请求。
- 检查广告活动、落地页和动作价值。
- 分配可信度,而非绝对真/假标签。
- 选择允许、限速、挑战或拦截。
- 为临时规则设置到期日期。
0–100 分保留灰色区域:
- 80–100:强烈的真人信号;
- 50–79:观察或应用轻度限制;
- 低于 50:多个自动化或风险信号。
阈值取决于产品。博客、银行和游戏有不同的风险容忍度。
将误报视为产品指标
阻止 99% 机器人却失去 5% 真实客户的系统,可能不如不那么激进的系统。应监控:
- 成功通过的挑战;
- 联系支持的被拦访客;
- 规则应用前后的转化;
- 通过新 IP 返回的机器人;
- 误报率高的端点。
每条规则都需要原因、负责人和回滚路径。“这个 IP 感觉奇怪”并不是运营政策。
像生产代码一样治理机器人规则
机器人控制规则容易不断累积。攻击期间添加的紧急 IP 封禁,可能在地址早已更换所有者后仍保留多年。应将规则视为有版本记录的生产逻辑。
每条规则应记录:
- 支持该规则的行为或事件;
- 使用的信号和可信度;
- 受影响端点和用户组;
- 负责人和批准日期;
- 到期或复查日期;
- 回滚说明;
- 需要观察的误报指标。
风险允许时,尽量在仅报告模式下测试新控制措施。记录本来会被限速或拦截的请求,再与成功登录、购买、已验证抓取工具和支持投诉比较。这个影子运行阶段能在影响客户前暴露过宽的正则和网络规则。
按访问面推出,而非全局应用。严格规则可能适合优惠券兑换,却会伤害文档页面。端点专用策略也能在变化发生时提供更清晰的指标。
为已验证运维保留紧急绕过机制和快速回滚路径。发生误报事故时,等待完整应用部署造成的损失,可能超过规则原本要阻止的自动化。
最后,像审查拒绝列表一样仔细审查允许列表。被盗用的合作伙伴令牌或过时抓取工具例外,可能成为永久漏洞。信任应有范围、可观察,并定期重新验证。
robots.txt 是机器人防御工具吗?
Robots.txt 是协作型抓取工具的约定。恶意自动化可以忽略它。它对 Googlebot 和合法抓取工具仍然重要,但不能替代 WAF、身份验证、速率限制或行为分析。
使用 Robots.txt 检查器,确保反采集更改没有意外屏蔽搜索抓取工具。
结论
请使用提供商的官方方法验证爬虫身份并审查其请求行为。安全响应头本身不能证明身份,也不能确认 WAF 是否允许访问。
常见问题
仅靠用户代理能验证 Googlebot 吗?
应该拦截每个数据中心 IP 吗?
robots.txt 能拦截恶意机器人吗?
免费检查您的网站
立即运行 SEO 审核或检查您的流量质量——无需注册。