参考手册Workspace 包参考

captcha 人机验证

基于 Cloudflare Turnstile 的人机验证,防止机器人注册和暴力破解

这是什么

@01mvp/captcha 是项目的人机验证包,基于 Cloudflare Turnstile。它的作用是区分真人和机器程序。

传统验证码让你选"哪个格子里有红绿灯"或输入歪歪扭扭的字母,Turnstile 的做法更友好:大部分情况下它会自动判断你是真人(通过浏览器行为分析),不需要你手动操作。只有可疑的情况才会弹出挑战。

能做什么

  • 防止机器人注册:注册页加上验证,防止批量创建垃圾账号
  • 防止暴力破解:登录接口加上验证,防止程序不断尝试密码
  • 保护任何表单:联系表单、投票、抽奖等都可以加验证

怎么配置

先去 Cloudflare Turnstile Dashboard 创建站点,拿到两个密钥:

TURNSTILE_SECRET_KEY 是服务端密钥,绝对不要暴露给前端或提交到 Git。NEXT_PUBLIC_TURNSTILE_SITE_KEY 是客户端密钥,可以安全暴露。

# 服务端密钥(后端用,不要暴露给前端)
TURNSTILE_SECRET_KEY=0x4AAAAAAA...

# 客户端密钥(前端用,可以暴露)
NEXT_PUBLIC_TURNSTILE_SITE_KEY=0x4AAAAAAA...

开发环境下可以关掉验证(enabled: false),避免频繁操作。

大概原理

前端页面加载 Turnstile 组件
  → Cloudflare 在后台分析浏览器行为(自动完成验证)
    → 如果觉得可疑,弹出简单的点击挑战
      → 验证通过后生成一个 Token(令牌)
        → 前端把 Token 一起发给后端 API
          → 后端调用 Cloudflare 验证这个 Token 是否有效
            → 有效 → 继续业务逻辑
            → 无效 → 返回错误(可能是机器人)

关键点:前端验证只是体验层,真正的安全检查在后端(API 路由里验证 Token)。不要在前端判断验证是否通过就放行。

相关链接