← 返回控制台

cap 是怎么挡住机器人的

一个免费、隐私友好、国内访问快的人机验证。它不靠追踪你是谁,而是靠工作量证明把滥用的成本抬高,再用边缘风控按风险给每个请求动态定价。下面是它的完整设计。

一次验证的旅程

从访客点下控件,到你的后端放行,中间只有四步,全程不需要你接触任何密钥:

浏览器请求挑战边缘按风险定难度浏览器算 PoW得到 token你的后端校验

控件向 cap.bug.im/v1/challenge 要一道题(一段需要暴力搜索才能解开的哈希),在访客的浏览器里算出答案,生成一个一次性 token;你的后端拿这个 token 加上私有 secret 调一次 /v1/siteverify,确认通过才放行。挑战的难度、绑定的站点、风险分,全都签进了那段挑战里,客户端改不动。

工作量证明:把成本加给机器人

传统验证码考的是「你能不能认出扭曲的字」,越来越多被打码平台和模型攻破,还折磨真人。cap 换了个思路:不考智力,考算力

浏览器必须找到一个数字 n,使 SHA-256(salt + n) 等于服务端给定的目标哈希。除了从 0 往上一个个试,没有捷径——这就是「工作量证明(Proof of Work)」。对真人来说,一次几秒、几乎无感;但对要在一秒内刷成千上万次的机器人,每一次都得付出同样的算力,成本被成倍放大。

关键在不对称:验证一个答案只要一次哈希(服务端瞬间完成),而找到答案要平均 maxnumber / 2 次哈希(客户端慢慢算)。挡的不是「单次」,是「批量」。

难度自适应:按风险定价

固定难度是个两难:调高了真人难受,调低了挡不住机器人。cap 的做法是每个请求单独定价——边缘节点在签发挑战前先给来源打一个风险分,再把难度映射到一个时间区间。

当前校准(以 M1 浏览器约每秒 9.2 万次哈希为基准):

干净住宅 IP
风险分 ≈ 0 → 难度约 2 秒(平均解题时间)
可疑来源
风险分居中 → 难度随分数线性升高
机房 / 威胁情报命中
风险分接近 100 → 难度约 15 秒

风险分怎么来?全部是边缘能免费、无侵入拿到的粗信号的加权和:

  • IP 纯净度:边缘节点直接拿到来源 ASN,机房 / 托管商(真人极少从这来)和威胁情报命中(FireHOL / CrowdSec 等公开情报)权重最高。
  • 请求头一致性:UA 自称是 Chrome 却不带 sec-ch-ua、缺 sec-fetch-*Accept-Language——这些是脚本伪装常露的马脚。
  • 协议特征:HTTP/1.0 等非浏览器客户端特征。

每个信号单独都很弱,但加权求和后足以把「批量脚本」和「真人」拉开——这正是 Turnstile / reCAPTCHA / 各家风控用的同一套配方。判分发生在服务端边缘,永远不在客户端,结论被签进挑战,改不了也伪造不了。

一次性 token 与防重放

ALTCHA 的签名盐带时效,但「时效内有效」不等于「只能用一次」。cap 在 /v1/siteverify 上加了一层重放库(键是 sha256(challenge:signature),TTL 等于挑战剩余有效期),把同一个 token 第二次提交直接判失败。token 里还绑定了 sitekey——为 A 站点签发的 token 拿到 B 站点校验会被拒,跨站盗用无效。

隐私

cap 不做侵入式指纹,不跨站追踪,不在浏览器里收集设备画像。它只用上面那几个粗粒度信号,加上一道短时效的数学题。完整 IP 仅用于你自己站点的用量统计,前端展示一律脱敏成 12.34.xx.xx。符合个人信息保护法的数据最小化原则。

接入只要两步

前端放一行嵌入(控件、主题、国际化全自动):

<script src="https://cap.bug.im/v1.js" defer></script>
<div class="cap-captcha" data-sitekey="cap_…"></div>

后端拿到隐藏字段 cap-response 的 token,连同 secret 校验一次:

curl https://cap.bug.im/v1/siteverify \
  -H "Content-Type: application/json" \
  -d '{"secret":"YOUR_SECRET","response":"<token>"}'
# → {"success":true,"score":0,"hostname":"你的域名"}

接口和 Cloudflare Turnstile 兼容,已有 Turnstile 集成的几乎零成本迁移。完整示例见调试台

诚实的边界

PoW 加 IP 风控能挡住现实中绝大多数廉价滥用,但它不等同于 Turnstile 那种行为级检测。住宅代理 + 真浏览器自动化 + 人工打码,这类组合连大厂方案都头疼——没有便宜的完美解,我们也不假装有。cap 的定位很清楚:把滥用变贵、把真人放行得无感,并且免费、国内快、隐私友好。

致谢 ALTCHA

cap 站在 ALTCHA 的肩膀上。

cap 的工作量证明核心,构建于开源项目 ALTCHAgithub.com/altcha-org/altcha)——一个隐私优先、无障碍、可自托管的人机验证方案。感谢 ALTCHA 团队把这样一件好用的工具开源出来;cap 所做的,只是在它之上加了多租户、边缘风控、难度自适应与国内加速。

想上手试试? 打开调试台 →