【丧心病狂】给你网站所有接口加上验证码

前几天研究 Turnstile 的时候翻到一篇文章。文章内介绍了 Turnstile 的 Pre-Clearance 功能,我觉得很有趣:

我们都知道 Cloudflare 的5秒盾被解决之后,会生成一个 cf_clearance 的cookie表示你已清关,后续请求会带上这个cookie畅通的无阻。这个cookie的表面有效期是 1年,实际上根据设置来定:

打开5秒盾意味着要有一个页面去过盾,不是很优雅。如果我们只想对一些关键接口(比如写接口)做保护,一般我们会接入 Turnstile 此类的验证码系统。我们在接入 Turnstile 的时候通常需要在服务端去 Cloudflare 验证提交过来的令牌是否有效,效率不高。

但现在借助 Pre-Clearance 生成的 cf_clearance 我们可以服务端免验证,非常灵活地保护这些关键接口,还不用打开页面的5秒盾,几乎无感知。

我们去 Turnstile 生成设置一个站点:

交互模式自己选。主要是要设置下方的预先许可。预先许可允许级别让你决定 Turnstile 解决之后生成的 cf_clearance 可以解决什么级别的waf拦截。

设置好之后拿到 站点密钥 在页面header中埋入js:

<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>

在页面合适位置放上标签:

<div class="cf-turnstile" data-sitekey="站点密钥"></div>

就完成了。这个页面被打开后解决了(选不可见小组见模式自动解决) Turnstile 即可种下 cf_clearance cookie。

之后我们只需要去 waf 规则里设置对你网站的哪些 API 接口进行质询即可,服务端不需要做任何代码开发。Turnstile 自动管理 cf_clearance,过期会自动触发解决来刷新。想用验证码保护什么接口只需要cf设置,脏活累活交给大善人。

更多高级玩法可以看本文开头的文章。

最后,你能感受到L站的验证码吗?


这种在你改不了或不想改后端代码,又想加上验证码的时候尤其有用。比如本站登录,我不想改动后端代码,用这种方式加验证码真的极其方便。

307 个赞

始皇V5

10 个赞

第一!

14 个赞

学习

8 个赞

前排

6 个赞

前排

9 个赞

不 你不是

5 个赞

前排学习

7 个赞

什么?L站有验证码?

4 个赞

+1

7 个赞

666

5 个赞

前排

3 个赞

前排

3 个赞

前排

2 个赞

哪儿的验证码?哪儿有?谁见过?啥样的? :tieba_089:

1 个赞

啊?

2 个赞

前排

2 个赞

前排

2 个赞

不明觉厉!

1 个赞

前排

2 个赞