Cloudflare Turnstile:无感替代传统验证码,免费好用的人机验证方案

8次阅读
没有评论

原文链接:https://developers.cloudflare.com/turnstile/

传统图片验证码、拼图验证码一直是开发者和用户共同的痛点:用户体验差、容易被 OCR 识别破解,还存在隐私争议。Cloudflare 推出的 Turnstile,主打无感人机验证,用来替代 CAPTCHA,个人与小项目可以免费接入,不需要网站接入 Cloudflare CDN 也能独立使用,适合登录、注册、表单提交、评论防刷等场景Cloudflare。

一、工作原理

Turnstile 的核心思路是在浏览器前端执行轻量质询,通过算力证明、浏览器环境探测、用户行为特征等信号综合判断访问者是人还是机器人,而不是一上来就让用户选图。

完整流程:

  1. 页面嵌入 Turnstile 前端组件,浏览器自动执行验证逻辑,生成一次性 token;
  2. 表单提交时,前端携带这个 token 一起发给后端;
  3. 后端必须调用 Cloudflare Siteverify API,传入密钥 + token 做二次校验;
  4. 校验返回成功,才放行业务请求;校验失败直接拦截。

重要提醒:只嵌入前端组件没有防护效果,后端校验是必不可少的一环。

二、三种运行模式,按需选择

Turnstile 提供三种工作模式,适配不同业务的风控需求:

  1. Managed(托管模式|推荐默认) 风险低时静默自动放行,用户完全无感知;只有风险较高时,才弹出简单勾选框,由 Cloudflare 自动决策交互时机。大部分网站表单、登录页首选。
  2. Non-interactive(非交互模式) 全程不会弹出勾选框,全部后台静默验证。一旦风险判定为异常,直接拦截请求,适合不希望打断用户、对拦截容忍度高的场景。
  3. Invisible(完全隐藏模式) 页面上看不到任何验证组件,无 UI 展示,后台悄悄完成验证,适合需要完全无感、不想页面出现任何验证元素的业务。

三、核心优势

  • ✅ 免费可用:免费额度足够个人站点、中小流量项目使用;高并发企业业务可升级企业版;
  • ✅ 隐私友好:不会收集用户数据用于广告追踪;
  • ✅ 不强制接入 CF CDN:独立部署,自有服务器、私有站点、多云环境都能接入;
  • ✅ 生态联动:可搭配 Cloudflare WAF、机器人防护体系一起使用,提升整体风控能力;
  • ✅ 体验更好:绝大多数正常用户不需要手动点选验证码,降低表单流失率。

四、最简接入代码示例

前端 HTML 嵌入

<script src="https://challenges.cloudflare.com/turnstile/v0/sitekey.js" async defer></script>
<form method="post" action="/login">
    <input type="text" name="username" placeholder="账号">
    <input type="password" name="password" placeholder="密码">
    <!-- 替换为你在Cloudflare后台拿到的 sitekey -->
    <div class="cf-turnstile" data-sitekey="你的SITEKEY"></div>
    <button type="submit">登录</button>
</form>

后端校验接口

校验地址固定:

https://challenges.cloudflare.com/turnstile/v0/siteverify

POST 请求,提交参数:

  • secret:后台密钥,严禁前端泄露
  • response:前端组件返回的 token
  • remoteip(可选):访客真实 IP,辅助风控

Node.js 简易校验示例:

async function verifyTurnstile(token, secretKey) {
    const res = await fetch("https://challenges.cloudflare.com/turnstile/v0/siteverify", {
        method: "POST",
        body: new URLSearchParams({
            secret: secretKey,
            response: token
        })
    });
    const data = await res.json();
    return data.success;
}

五、踩坑与局限性

  1. 国内访问稳定性问题:验证脚本域名 challenges.cloudflare.com 在国内访问容易加载缓慢、超时,访问量大的国内站点需要考虑代理加速方案;
  2. 自动化脚本容易被拦截:Playwright、Selenium 等爬虫、自动化框架默认很容易触发风控拦截,自动化场景需要额外做环境伪装;
  3. 免费版存在额度上限,高频提交、高并发业务需要提前评估配额;
  4. 测试时 Cloudflare 提供专用测试 Sitekey,方便本地开发调试,不会真实计入额度。

六、适合与不适合场景

✅ 适合:网站登录注册、留言评论、联系表单、API 提交防刷、内部工具表单; ❌ 不太适合:纯国内高并发业务(无代理加速时加载不稳定)、强自动化测试流程。

小结

如果你还在用传统图片验证码,想改善用户体验、同时低成本抵御机器人和垃圾提交,Turnstile 是非常值得优先尝试的方案。接入成本低、文档完善,托管模式开箱即用,只需要注意后端校验不能省略,以及国内环境下的加载加速问题。

正文完
可以使用微信扫码关注公众号(ID:xzluomor)
post-qrcode
 0
评论(没有评论)
验证码