cap 是怎么挡住机器人的
一个免费、隐私友好、国内访问快的人机验证。它不靠追踪你是谁,而是靠工作量证明把滥用的成本抬高,再用边缘风控按风险给每个请求动态定价。下面是它的完整设计。
一次验证的旅程
从访客点下控件,到你的后端放行,中间只有四步,全程不需要你接触任何密钥:
控件向 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 纯净度:边缘节点直接拿到来源 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 的工作量证明核心,构建于开源项目 ALTCHA(github.com/altcha-org/altcha)——一个隐私优先、无障碍、可自托管的人机验证方案。感谢 ALTCHA 团队把这样一件好用的工具开源出来;cap 所做的,只是在它之上加了多租户、边缘风控、难度自适应与国内加速。