Cloudflare Turnstile 人机验证
将以下提示词粘贴到你的 AI 对话框中:
请根据 https://skillhub.cn/install/skillhub.md,安装 @org-02qudk26/turnstile-spin1。
技能介绍
要解决什么问题
注册、登录或联系表单一旦被脚本批量提交,轻则垃圾数据,重则撞库与滥用。Cloudflare Turnstile 能在前端收集人机验证令牌,但端到端仍要处理:在 Cloudflare 创建 Widget、为 cf-turnstile-response 配置服务端校验、避免在浏览器里直接调用 siteverify,以及把现有提交逻辑与校验结果对齐。手工对照 developers.cloudflare.com/turnstile 逐项改代码,很容易漏域名、漏 Worker 密钥或改坏原有表单处理。
技能如何工作
本技能把「set up Turnstile」收敛为多步向导:Agent 调用 scripts/ 下脚本处理确定性逻辑(API、重试与错误分支),自身负责读仓库、确认不可逆步骤与前端改动。
典型流程包括:
- 鉴权与范围:
auth-probe.sh检查 API Token 是否具备Account.Turnstile:Edit与Account.Workers Scripts:Edit(wrangler login的 OAuth 范围通常不够)。 - 域名与插入点:默认包含
localhost/127.0.0.1,并从package.json、wrangler.toml、README 等推断生产域名;扫描框架后给出表单插入候选并让你确认。 - 后端契约:创建 managed Widget 后部署托管 siteverify Worker;校验路径固定为 浏览器 → 你的 Worker → Cloudflare siteverify,不把 secret 写入磁盘。
- 前端契约:gate,don't replace——在
success === true之后再执行原有 submit 处理,不替你改邮件、数据库或支付。 - 收尾:
validate.sh跑通后才报成功;可选将技能持久化到.claude/skills/turnstile-spin/。
若已有 sitekey,可走恢复流程:用 fetch-secret.sh 拉元数据,跳过新建 Widget,从 Worker 部署继续;扫描到 reCAPTCHA / hCaptcha 时会给出迁移替换说明。
适用边界与注意点
- 硬边界:不处理仅 Workers/Pages/R2 且未提及 Turnstile 的任务;不编写自定义 Worker 功能;不碰表单持久化、OAuth、支付;不做大规模前端重构。
- Pre-clearance:
clearance_level !== no_clearance时 siteverify 可能非必需,技能会按文档说明退出或让你确认。 - 安全:Turnstile secret 仅经 stdin 交给
wrangler secret put;覆写文件前需展示 diff;Token 勿长期留在对话记录中。
使用场景
- 联系表单近期出现大量机器注册,需要在保留现有提交逻辑的前提下接入 Turnstile 并走 Worker 做 siteverify。
- 本地用 localhost 调试登录页,同时要登记生产域名,让 Agent 扫描代码库并确认 Widget 插入位置。
- 已有 Turnstile sitekey 但服务端校验从未生效,希望不轮换密钥,只部署托管 siteverify Worker 并改前端。
- 代码里仍在用 reCAPTCHA 或 hCaptcha,需要按技能给出的迁移方案替换脚本、令牌字段与后端校验地址。
适合人员
- 维护官网注册/登录表单的工程师,诉求是在 Cloudflare 侧补齐 Widget 与 siteverify,而不是重写邮件或数据库逻辑。
- 使用 Wrangler 部署前后端、但不熟悉 Turnstile API 权限范围的独立开发者,需要按向导配置 Custom API Token。
- 在编辑器里直接说「protect this form」或「stop bot signups」的产品/全栈同学,希望端到端跑通校验再上线。
- 负责从 Google reCAPTCHA 迁出、且能接受 Turnstile 仅返回 success 布尔值(无 v3 分数)的安全或平台工程师。