网站套cloudflare验证详细教程

Post Time: Nov 18, 2025
Update Time: Nov 18, 2025

一、Cloudflare 验证体系概述

Cloudflare 的“验证”体系主要包含两大类:

1. Turnstile(用户交互验证组件)

Cloudflare 提供的验证码解决方案,用于取代 reCAPTCHA。 主要用于:登录、注册、表单提交、访问敏感接口等场景。

特性

  • 免费

  • 隐形验证(Invisible)

  • 后端可验证 Token,有效防止恶意机器人

2. Security Challenge(安全挑战 / 浏览器检查)

由 Cloudflare 边缘节点自动触发,用于抵御:

  • 大规模扫描

  • 恶意 Bot

  • Flood 攻击

  • 可疑来源流量

触发方式包括:

  • Browser Integrity Check (BIC)

  • Managed Challenge

  • Captcha Challenge(仍可选择)

  • Under Attack Mode 模式下的“浏览器检查”页面

二、集成 Cloudflare Turnstile(正式流程)

2.1 注册并创建 Turnstile 实例

1.登录 Cloudflare 控制台 https://dash.cloudflare.com/

  1. 左侧菜单选择 Turnstile

  2. 点击 Create

  3. 配置:

  • Site Name:组件命名

  • Domain:限定或开放域名

  • Widget Mode:建议 Invisible(隐式)

  1. Cloudflare 将生成:
  • site_key

  • secret_key

这两个密钥分别用于前端嵌入与后端验证。

2.2 前端嵌入 Turnstile 组件

在 HTML 中引入 Turnstile API

html Copy
1<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
2
3

嵌入 Turnstile

<form Copy
1    <!-- 其他表单字段 -->
2
3    <div class="cf-turnstile"
4        data-sitekey="YOUR_SITE_KEY">
5    </div>
6
7    <button type="submit">提交</button>
8</form>
9
10

隐式验证(Invisible)可以采用自动触发模式,无需展示组件。

2.3 后端 Token 验证(核心安全步骤)

Turnstile 返回的 token 在后端必须校验。 以下提供标准代码示例。

Node.js(示例)

js Copy
1import fetch from "node-fetch";
2
3export async function verifyTurnstile(responseToken) {
4    const secretKey = process.env.TURNSTILE_SECRET;
5
6    const result = await fetch(
7        "https://challenges.cloudflare.com/turnstile/v0/siteverify",
8        {
9            method: "POST",
10            body: new URLSearchParams({
11                secret: secretKey,
12                response: responseToken,
13            }),
14        }
15    );
16
17    return await result.json();
18}
19

PHP(示例)

php Copy
1$secret = "YOUR_SECRET_KEY";
2$response = $_POST['cf-turnstile-response'];
3
4$verify = file_get_contents(
5    "https://challenges.cloudflare.com/turnstile/v0/siteverify",
6    false,
7    stream_context_create([
8        "http" => [
9            "method" => "POST",
10            "header" => "Content-type: application/x-www-form-urlencoded",
11            "content" => http_build_query([
12                "secret"  => $secret,
13                "response" => $response,
14            ])
15        ]
16    ])
17);
18
19$result = json_decode($verify, true);
20
21if ($result["success"] === true) {
22    // 验证通过逻辑
23}
24
25

三、配置 Cloudflare Security Challenge(安全挑战)

如果希望对可疑流量执行“浏览器检查”或 Challenge,可以通过 Cloudflare 安全策略进行配置。

3.1 调整全局安全等级(Security Level)

路径: Security → Settings → Security Level

可选值:

等级含义
High更频繁触发挑战页面
Under Attack出现“Checking your browser”页面

若网站处于攻击状态,Under Attack Mode 可大幅提升安全性。

3.2 启用 Bot Fight Mode(智能对抗机器人)

路径: Security → Bots → Bot Fight Mode → ON

此模式可识别并处置恶意自动化流量。 对可疑来源将触发挑战或直接阻断。

3.3 自定义 WAF 规则触发 Challenge

进入

Security → WAF → Custom Rules → Create rule

示例:对 /admin 路径要求浏览器验证。

Rule Expression

lua Copy
1http.request.uri.path eq "/admin"
2

Action

nginx Copy
1Managed Challenge
2

或者:

nginx Copy
1JS Challenge
2Captcha Challenge
3

此类规则适用于

  • 管理后台防护

  • API 接口防止滥用

  • 关键逻辑路径的访问控制


四、推荐的生产环境配置方案

以下方案可覆盖绝大多数站点的安全需求:

4.1 前端交互部分

  • Turnstile(Invisible)用于:

    • 登录
    • 注册
    • 密码找回
    • 评论/用户提交表单
    • API 请求频率较高的接口

4.2 Cloudflare 边缘安全防护

  • Security Level:High

  • Bot Fight Mode:ON

  • Browser Integrity Check:ON

  • WAF 自定义规则:

    • /admin → Managed Challenge
    • /api/* → Rate limiting + Challenge

4.3 抗攻击设置

  • 若遭遇攻击:切换到 Under Attack Mode

  • 监控访问日志(Security → Events)动态调整规则

结论

通过引入 Cloudflare 的验证体系——包括前端的 Turnstile 验证机制 与边缘侧的 Security Challenge 安全挑战——网站能够构建起覆盖应用层与网络边缘的多层次安全架构。Turnstile 为用户交互场景(如登录、注册与表单提交)提供轻量化、隐私友好的验证能力,而 Cloudflare 边缘节点的安全挑战机制则能有效识别并拦截恶意机器人、异常流量与潜在攻击行为。

当二者结合使用,并配合合理的 WAF 规则、安全等级设置与访问控制策略时,整个站点的安全性与抗攻击能力将显著提升,同时仍能保持良好的用户体验与系统性能。通过根据业务风险等级对验证策略进行精细化调整,开发者与运维人员可以建立一个高可用、高伸缩性、易维护的安全防护体系。总体而言,Cloudflare 的验证组件为现代 Web 应用提供了兼具可靠性与灵活性的安全保障方案。

相关文章

Consent Preferences