使用 Turnstile 保护网站

Turnstile 是 Cloudflare 近期推出的一项免费验证码服务,可以用来验证当前用户是否是真人。与 CAPTCHA 不同,它不要求我们使用 Cloudflare 网络,所以任何网站都可以使用这项服务。对我这种 Vercel 重度用户来说,Turnstile 非常合适。

对初创 AI 产品来说,我们既怕用户滥用我们的服务,毕竟每个 token 都要花钱(甚至要花不少钱);又怕复杂的登录注册会把用户吓跑。于是验证码就成为了比较好的选择,毕竟,只要不是自动化批量请求,自然人用户随便用用,基本上不会产生问题。

Turnstile 使用 JS 脚本收集用户在当前网页上的交互,并通过一些深度学习的模型来判断当前用户是否是真人,这样一来就可以减少验证码出现的频率,提升用户体验。另外,免费版 Turnstile 可以不限次数地使用,对于我这种白嫖党来说,也是重大利好。

所以,综上,我近期给公司的 API 加上了 Turnstile,以避免可能产生的滥用。

使用 Turnstile 非常简单,这里简单说一下。

  1. 首先,我们要注册一个 Cloudflare 用户。这一步应该有手就行,我就不多说了。
  2. 接下来,创建 Turnstile 应用。
  3. 然后复制保存 Site Key 和 Secret Key。
  4. 在项目中集成 Turnstile。

Turnstile 的工作逻辑是这样的:

  1. 我们往页面里嵌入 Turnstile JS
  2. Turnstile JS 会收集用户的各种信息,作为判断用户是否是真人的依据
  3. 当用户需要与 API 交互的时候,Turnstile JS 会生成一个 token,用户需要把 token 一起提交给 API
  4. API 拿到 token,去 Turnstile Server 检查该 token 代表的用户是否是真人
  5. 如果是,就继续执行;如果不是,就返回错误
  6. 当然,还有一些衍生逻辑,比如验证来源,token 超时失效等等

上面这些逻辑手动实现并不复杂,如果有现成的库,使用起来就更简单。我厂的 SoulScript 使用 Nuxt3 框架,有官方推荐的模组 @nuxtjs/turnstile,所以我只要按照文档进行配置,就可以在项目当中使用 Turnstile。

不过实际测试之后,我发现还是有点问题:

  1. 免费版(Managed)的验证码窗口不是太好看,体积也不小,插入高设计感的网站,视觉效果不理想
  2. 如果在用到验证码的时候再检查用户状态,需要花费几秒到十几秒的时间,会耽误用户干正事。

所以我加了个开关,没发现问题就先关上,等用量上去的时候再开。


以前我比较倾向用户体系和注册登录,因为这样可以收集更多用户信息,也比较方便我们控制用户的行为。不过现在,流量越来越贵、用户越来越难搞,同时,免费服务、Serverless 越来越多,也许,local storage + 真人验证才是下一阶段我应该首选的策略。

如果您觉得文章内容对您有用,不妨支持我创作更多有价值的分享:


已发布

分类

来自

标签:

评论

欢迎吐槽,共同进步

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据