Skip to content

防护能力 ​

基础 Capcat 不用图形拼图或第三方追踪 cookie。它叠加多个相互独立的防护层,让自动化滥用的成本层层抬高。PoW、环境校验与现成自动化浏览器拦截默认开启;行为评分、自适应处置和第三方 provider 还分别受站点 opt-in 与 operator runtime gate 控制。代码已发布或控制台出现选项,都不等于该层已经对生产流量生效。

工作量证明——基座 ​

每次验证都要求浏览器完成一道 SHA-256 工作量证明,由开源 Cap 引擎驱动。它在后台静默运行:真实用户最多感知到亚秒级的延迟,而批量滥用者的每一次尝试都要付出真金白银的 CPU 时间。

环境校验 ​

每道挑战都附带一段动态生成的校验程序,必须在求解环境里完整跑完。它确认求解发生在真实浏览器中——直连 API 的脚本(curl、Python、Node 机器人)即使算出了工作量证明也换不到 token。程序逐挑战重新生成并随机化,不存在可以写死绕过的固定检查清单。全部站点默认开启。

无头浏览器拦截 ​

Selenium、Playwright、Puppeteer 等现成自动化工具以及无头浏览器,会在客户端与服务端被双重识别并拒绝。Capcat 在上游引擎之上持续维护和强化这套检测,置信度最高的信号每道挑战必查。默认开启;若你的用户群里有安装自动化类浏览器扩展的真实用户,可按站点关闭。

这层针对现成工具特征,不承诺拦住经过修改的 stealth browser、真实浏览器代解或人工打码。能通过静态环境检查的 residual automation,需要下面的行为、velocity、provider score 与业务后端策略继续判断。

有界行为与 Account Defense——分阶段启用 ​

当站点和 operator runtime gate 同时开启时,Widget 会按签名策略采集最多 15 秒、128 个样本的鼠标/触摸/键盘、激活、焦点与可见性聚合;只上传直方图和统计量,不上传原始坐标或事件序列。建议重新复制控制台生成的 embed,使其包含 data-cap-behavior-signals,这样可以在页面加载后提前取得签名策略并覆盖点击前的接近轨迹;旧 embed 只能在首次交互后的预取窗口发现策略,快速首次点击可能只有 activation coverage。

服务端可把这些聚合与网络 provenance、hosting ASN、短窗 velocity 组合成 risk_score,再随一次性 token 送到鉴权后的 /siteverify,由你的注册后端决定放行、二次验证或拒绝。只有控制台 runtime 状态明确显示 Collection、Token metadata 与 Score response 已开启时,这些字段才存在;缺失字段绝不能当作低风险。当前 development ML candidate 只允许隔离 shadow,不参与生产拦截。

自适应难度 ​

自适应管线可以按站点流量形态临时调高工作量证明难度,恢复正常后再降回。但它不是默认全站开启:只有 ingestion、告警、warm-up、canary 与 rollback gate 全部通过后,operator 才能逐步启用。控制台或文档出现该能力时,不应据此假设当前站点已经自动加固。

时间锁谜题(RSW)——按需开启 ​

对注册、下单、领券等高价值接口,可以启用 RSW 时间锁谜题:一种本质上串行的计算,堆核心、上 GPU 都无法加速。每次验证都要等待与硬件无关的固定时长,把任何规模的机器人集群限制在恒定的单客户端速率上。强度按站点可调,默认约增加 0.5–2 秒。

Cloudflare Turnstile(Invisible)——可选 ​

你可以叠加一套使用自有密钥的 Turnstile,作为纵深防御。这是付费套餐的高级能力(管理员与 internal 账号同等可用);Free 账号的控制台不显示该配置,套餐降级后运行时会自动关闭,但保留已存凭据便于之后恢复。该功能默认关闭。请在 Cloudflare 创建 Widget 时选择 Widget mode: Invisible——invisible 是 Widget 模式,不是客户端 size 参数。开启后,用户激活 Capcat 勾选框时,Turnstile 与 Capcat challenge 会并行执行,Widget 在同一次 redeem 请求中提交两份结果。

只有站点保存了 BYOK site key/secret、base snapshot 已收敛且 mode 的 runtime 状态为 observe 或 strict 时才会执行;defaults-off dark deploy 不会改变任何请求。

  • Observe 会执行并记录 Turnstile,但它明确拒绝或服务不可用时,都不会拦截原本有效的 Capcat 解答。建议先用这个模式测兼容性与误伤。
  • Strict 要求两项同时通过。缺失或被拒绝的 token 返回 403;服务端访问 Siteverify 遇到网络、限流或内部故障时返回可重试的 503。

Capcat 会先验证自身签名挑战并消费 nonce,之后才调用 Cloudflare,因此任意伪造请求不能直接消耗第三方核验。服务端还会核对 Turnstile 返回的 hostname、签名绑定的 action 和逐 challenge 绑定的 cData;第三方 secret 只以站点绑定的 AES-GCM 密文保存,绝不会返回浏览器。

此模式会从 https://challenges.cloudflare.com 加载第三方代码,并向 Cloudflare 发送验证所需的网络与浏览器信号。Cloudflare 要求 Invisible mode 的使用者在隐私政策中引用 Turnstile Privacy Addendum。若使用 CSP,至少在 script-src 与 frame-src 中放行该 origin。Strict 模式要求正常浏览器 Origin,不适合依赖「允许无 Origin」例外的原生客户端。

Google reCAPTCHA v3——可选 ​

你也可以 BYOK 一组经典 reCAPTCHA v3 site key 与 secret。它与 Turnstile 共用相同的付费权益门禁,两者相互独立,也可以同时开启。只有用户激活 Capcat 勾选框时才执行 v3;签发 Capcat token 前,服务端会核验 Google 返回的 success、hostname、action 与数值 score。

这同样是 defaults-off 能力。只有凭据、隐私披露、base snapshot 与站点 enabled 状态全部就绪后才会加载 Google;仅部署代码或设置加密 master key 不会产生评分或拦截。

控制台可设置 0 到 1 的最低通过分数:

  • 设为 0.3 时,低于 0.3 的结果会被拒绝,Capcat 勾选框保持无效;
  • 设为 0 时,任何有效的 Google 分数都可通过,但不会跳过 Google token 核验。鉴权后的 Capcat /siteverify 会返回该分数,供你的后端自行执行更细的策略。

例如,启用 v3 的站点校验成功后可返回 { "success": true, "score": 0.7 }。分数与不透明、一次性的 Capcat token 绑定,不会暴露在浏览器的 solve 事件中;因此后端无需信任客户端自报的分数,同时保留 reCAPTCHA 风格的服务端响应。

Google 规定 v3 token 两分钟过期、只能核验一次,并应在受保护动作发生时执行而不是页面加载时执行。Capcat 遵循这一生命周期并核对预期 action。详见 Google 的 reCAPTCHA v3 指南 与服务端核验契约。

选择阻断阈值前,应先在真实流量中观察分数。Google 说明 v3 评分依赖真实流量,并建议测试环境使用独立 key;自动化测试分数不能替代生产校准,详见 reCAPTCHA FAQ。

经典 v3 超出月配额后,可能在附带 Over free quota. 错误的同时返回固定 0.9。Capcat 不会把这个兜底分数当成真实评分;任何 provider error 都按服务不可用(503)拒绝。使用 BYOK 时请监控 Google 配额。

启用后页面会加载 www.google.com 与 www.gstatic.com 的第三方代码,reCAPTCHA 还会为风险分析设置必要 cookie。请补充相应隐私披露,并在 CSP 中按 Google 文档放行 script-src、frame-src 与 connect-src。Capcat 默认保留 reCAPTCHA badge;除非同时加入 Google 要求的 Privacy Policy 与 Terms of Service 文案,否则不要隐藏。BYOK secret 只以站点绑定的 AES-GCM 密文保存,绝不会下发浏览器。本接入只支持经典 v3 key;reCAPTCHA Enterprise 使用不同的 assessment API,不能混用。由于 Capcat 会把 provider hostname 与浏览器 Origin 精确核对,这层防线不适用于原生客户端或其它无 Origin 客户端。

服务层防线 ​

  • 域名绑定——site key 只在你允许的域名下生效,其余请求在消耗额度之前就被拒绝;
  • token 一次性核销——验证 token 只能核销一次,重放必失败;
  • 限流与配额——按 key 限流加每月配额,失控或恶意的用量不会变成你的账单。

坦白局限 ​

没有任何验证码——包括商业产品——能拦住手握定制隐身浏览器和真实硬件的顽固攻击者。叠加独立防护层的意义在于经济账:每次尝试的 CPU 成本、恒定速率的时间锁、专破现成工具的环境校验、滥用一露头就上调的难度。可选的独立供应商能增加一类信号,也会带来它自己的可用性和隐私取舍。我们把这一点如实写出来,而不是承诺魔法。

以上能力会在控制台站点详情的防护卡片中分别显示“配置意图”和 runtime 状态。若控制面处于 rollout freeze,写入会被明确拒绝,不能把只读选项当成已开启;解除冻结后也必须等待 base snapshot 发布与多 POP 验证,不能承诺固定一分钟生效。

基于 Cap(Apache 2.0)构建