reCAPTCHA v3 评分详解:网站如何在无挑战的情况下判断访客
reCAPTCHA v3 不显示任何挑战。它在页面后台运行,观察访客,并返回一个 0.0 到 1.0 之间的分数。分数越高,表示访客越可能是人类。网站的后端决定如何处理这个分数。例如,注册表单可能会在 0.7 分时放行访客,在 0.3 分时拦截。Scarnox 对 reCAPTCHA v3 的支持即将推出。本指南说明评分的工作方式,以及让自动化工作不被判定为机器人的正当方法。
分数是如何产生的
页面加载 reCAPTCHA 脚本,并针对某个动作(例如 login 或 signup)调用它。脚本在浏览器中收集信号,并将其发送给 Google,Google 返回一个 token。网站的服务器再把这个 token 连同它的密钥一起发送给 Google 的验证接口,并收到一个分数和动作名称。
分数是根据几类信号综合得出的风险估计:
- 浏览器环境,包括它看起来是否像标准的桌面浏览器;
- 页面上的行为,例如鼠标移动、滚动和时间间隔;
- 访客在该网站上的历史,例如之前成功的会话;
- 请求模式,包括同一地址的请求频率和速度。
具体的权重没有公开,而且还会变化。公开的只是约定:网站选择阈值,分数决定结果。
为什么自动化会得低分
自动化流量往往因为可预测的原因而得低分。使用默认设置的无头浏览器有异常的信号。新会话没有历史记录。快速、规律的请求模式不像人在浏览。数据中心地址比家庭宽带更容易受到怀疑。每一个都是一个信号,几个信号叠加在一起,就可能把分数拉到阈值以下。
由于没有可见的挑战,低分往往意味着静默失败。页面加载了,表单却被拒绝了,而且没有任何提示说明原因。因此,请建立你的日志,以便从服务器端看到这个错误。
保持分数健康的正当方法
这些做法适用于你自己的工作以及合法的数据收集:
- 使用真实的浏览器配置文件。 使用正常设置和扩展的普通浏览器,比精简的无头版本更不容易被判定为机器人。浏览器指纹识别指南解释了浏览器环境是如何被读取的。
- 保持会话活跃。 在请求之间保留 Cookie,不要让每个页面都从空白状态开始。
- 控制请求节奏。 真实访客不会在一秒内加载一百个页面。加入延迟,并让延迟在合理范围内随机变化。
- 避免明显的漏洞。 默认的 User-Agent、缺失的语言设置以及不一致的屏幕尺寸,都是很容易修复的信号。
- 用自己的阈值进行测试。 如果网站是你运营的,请在预发布环境中查看分数,并检查哪些信号拉低了分数。Google 的测试密钥对于在不产生真实评分的情况下测试集成很有用。
这些步骤能减少合法工作中的误判。它们并不是为滥用行为伪造人类分数的手段,而且无论如何,网站所有者才决定阈值。
分数不能说明什么
分数并不能证明访客是人类,也无法告诉你访客为什么得了低分。低分可能来自一个不常见但合法的浏览器、共享网络或 VPN。请把分数视为一个输入。如果你的合法工作持续得低分,诚实的解决办法通常是向网站所有者申请白名单或使用 API。
Scarnox 的现状
Scarnox 目前无法实时识别 reCAPTCHA v3。今天唯一上线的任务类型是无代理的 PopularCaptcha。reCAPTCHA v3 即将支持。基于分数的识别器需要返回网站能接受的 token,这与识别可见谜题是不同的问题,因此在支持上线时,集成细节会记录在 API 参考中。
注册账户,免费试用额度,无需信用卡,这样在该类型上线时,你就已经准备就绪。
在你自己的日志中查看分数
由于没有可见的挑战,理解基于分数的失败的唯一方法就是记录日志。在你自己的网站上,请记录后端在验证调用中收到的分数、动作名称和成功标志,并附上请求的时间戳和来源路径。经过一周的流量积累,通常就能看出哪些页面或流程得分偏低。如果某个流程始终偏低,问题可能出在正常用户身上,例如页面加载后太快就进入注册步骤,而不是机器人的问题。
同时,请比较同一动作在不同浏览器和网络下的分数。如果一个普通访客在家庭宽带下得分很好,而在企业 VPN 下得分很差,那么分数反映的是网络而不是浏览器,解决办法应该是沟通访问权限,而不是修改自动化脚本。
请确保日志中不包含个人数据。分数和动作名称通常足以诊断大多数问题,存储更多内容只会产生你不希望承担的隐私义务。
负责任地抓取
抓取任务开始之前,请检查 robots.txt 和网站的条款。保持较低的请求频率,避免收集你不需要的个人数据,并记住,基于分数的检查是网站为保护自己所选择的方式。大规模绕过它,就说明这项任务应当重新考虑,或者与网站所有者达成一致。网页抓取合法吗?涵盖了更广泛的情况。