CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Cloudflare 实战入门/课时/安全与防护
RawBlame
课时目录12 节

Cloudflare 实战入门

  1. 01边缘计算概览
  2. 02Wrangler 与本地开发
  3. 03Workers 核心
  4. 04Workers KV
  5. 05R2 对象存储
  6. 06D1 数据库
  7. 07Queues 消息队列
  8. 08Durable Objects
  9. 09Workers AI
  10. 10Stream 与媒体
  11. 11安全与防护
  12. 12运维与集成

安全与防护

TLS、WAF 与 Bot 管理。

30 分钟

安全与防护

这一课你将能做到

  1. 配置 Cloudflare WAF 规则拦截 SQL 注入、XSS、路径遍历等常见攻击
  2. 使用 Worker 实现 JWT 鉴权、速率限制(Rate Limiting)、IP 黑白名单
  3. 理解 TLS 加密、Bot 管理、DDoS 防护的基本原理和配置方式

为什么要学

你的 API 上线第一天就被人扫了:有人尝试 /admin、.env、wp-login.php;有人写脚本每秒发 1000 个请求想压垮你的服务器;还有人在登录接口尝试 SQL 注入。没有安全防护,你的应用就像裸奔。

人话:Cloudflare 的安全体系是「边缘拦截」——攻击流量还没到你的源站,就在边缘节点被拦住了。WAF 是防火墙,Rate Limiting 是限流器,Bot Management 是机器人识别,TLS 是加密通道。这套组合拳打下来,90% 的自动化攻击都会被挡在门外。

先建立图像

恶意请求                        正常用户
    │                              │
    ▼                              ▼
[Cloudflare Edge Node]
    │
    ├── [WAF] ──> SQL注入? XSS? ──> 拦截 403
    │
    ├── [Rate Limiting] ──> 超过 100 req/min? ──> 拦截 429
    │
    ├── [Bot Management] ──> 是爬虫? ──> 挑战验证 / 拦截
    │
    └── [TLS 加密] ──> 中间人攻击? ──> 加密通道
         │
         ▼
    [你的源站 / Worker]

跟着做

步骤 1:配置 WAF 规则

Dashboard → Security → WAF → Custom Rules → Create Rule:

  • 规则名:Block SQL Injection
  • 字段:URI Query String
  • 操作符:contains
  • 值:union select(或 drop table、insert into 等)
  • 动作:Block

保存后,任何包含这些关键词的请求都会返回 403。

步骤 2:Worker 实现 JWT 鉴权

import { verify } from 'hono/jwt';

export interface Env {
  JWT_SECRET: string;
}

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const authHeader = request.headers.get('Authorization');
    
    if (!authHeader?.startsWith('Bearer ')) {
      return new Response('Unauthorized', { status: 401 });
    }
    
    const token = authHeader.slice(7);
    
    try {
      const payload = await verify(token, env.JWT_SECRET);
      // 鉴权通过,继续处理业务
      return Response.json({ userId: payload.sub, role: payload.role });
    } catch (err) {
      return new Response('Invalid token', { status: 401 });
    }
  },
} satisfies ExportedHandler<Env>;

步骤 3:Worker 实现速率限制

用 KV 做简单的滑动窗口限流:

export interface Env {
  RATE_LIMIT_KV: KVNamespace;
}

export default {
  async fetch(request: Request, env: Env): Promise<Response> {
    const ip = request.headers.get('CF-Connecting-IP') ?? 'unknown';
    const key = `rate:${ip}`;
    
    const current = await env.RATE_LIMIT_KV.get(key);
    const count = current ? parseInt(current) : 0;
    
    if (count > 100) {
      return new Response('Too Many Requests', { status: 429 });
    }
    
    await env.RATE_LIMIT_KV.put(key, (count + 1).toString(), { expirationTtl: 60 });
    
    return Response.json({ remaining: 100 - count - 1 });
  },
} satisfies ExportedHandler<Env>;

步骤 4:配置 TLS

Dashboard → SSL/TLS → Overview:

  • 加密模式:Full (Strict)——源站必须有有效证书,推荐
  • 最低 TLS 版本:TLS 1.2
  • TLS 1.3:开启
  • 自动 HTTPS 重写:开启

步骤 5:Bot 管理(基础版)

Dashboard → Security → Bots:

  • Bot Fight Mode:开启(免费)
  • Verified Bots:允许(Google、Bing 等搜索引擎)

讲清楚要点

  1. WAF 规则越具体越好:不要只写 contains "select",这会误杀正常请求。要匹配完整的攻击模式,如 union select、' or '1'='1。
  2. Rate Limiting 在边缘做:Cloudflare 自带的 Rate Limiting Rules(付费)比 Worker 里的 KV 限流更可靠、性能更好。Worker 限流适合自定义逻辑(如按用户 ID 限流)。
  3. TLS Full (Strict) 是必须的:Flexible 模式(浏览器到 CF 加密,CF 到源站不加密)有中间人攻击风险。Strict 要求源站有有效证书,可以用 Cloudflare Origin CA 免费签发。
  4. Bot Management 是 AI 驱动的:不是简单的 User-Agent 匹配,而是行为分析(鼠标移动、点击模式、请求频率)。免费版 Bot Fight Mode 能拦住大部分低级爬虫。
  5. DDoS 防护是默认开启的:Cloudflare 的 Anycast 网络天然分散 DDoS 流量。L3/L4 层攻击自动吸收,L7 层需要 WAF + Rate Limiting 配合。

你可能会懵的地方

  • WAF 会误杀正常请求吗? 会。比如用户搜索「how to select from database」,如果 WAF 规则只匹配 select,就会误杀。解决方法:规则要精确,或者用「跳过规则」给特定路径豁免。

  • Rate Limiting 会不会误杀爬虫? 会。Google 爬虫的 IP 会被限流。解决方法:把已验证的搜索引擎 IP 加入白名单,或开启 Verified Bots 允许。

  • Worker 里怎么获取真实 IP? request.headers.get('CF-Connecting-IP')。不要用 X-Forwarded-For,它可以伪造。

  • TLS 1.3 和 1.2 有什么区别? TLS 1.3 握手更快(1-RTT vs 2-RTT),更安全(移除了不安全的加密套件)。建议开启,但保留 1.2 兼容旧设备。

  • DDoS 防护要额外付费吗? L3/L4 层 DDoS 防护免费且默认开启。L7 层(HTTP 层)的精细防护需要 WAF 和 Rate Limiting,部分功能付费。

错法对照

错法问题正解
用 X-Forwarded-For 获取 IP可以伪造,绕过限流用 CF-Connecting-IP
TLS 模式设为 FlexibleCF 到源站明文传输,可被中间人攻击设为 Full (Strict)
Rate Limiting 按 IP 一刀切公司/学校 NAT 出口 IP 被误杀按用户 ID + IP 组合限流,或给白名单
WAF 规则只写 select误杀正常搜索请求匹配完整攻击模式,如 union select
把 JWT Secret 硬编码在代码里代码泄露导致所有 token 可被伪造用 wrangler secret put 存储

卡点急救

  1. WAF 规则不生效:检查规则是否已启用;检查规则优先级(数字越小优先级越高);用 Security Events 查看请求是否被拦截。
  2. Rate Limiting 返回 429 但用户是正常用户:IP 可能是共享出口(公司/学校)。降低阈值,或改用按用户 ID 限流。
  3. TLS 证书错误:确认源站证书有效;如果是自签名证书,把 TLS 模式设为 Full(不验证证书链),但仍有中间人风险。

面试常问

  • Cloudflare 的 DDoS 防护原理? Anycast 网络把流量分散到全球 300+ 节点,攻击流量被稀释。L3/L4 层自动吸收;L7 层通过 WAF 规则、Rate Limiting、Bot 管理识别和拦截恶意 HTTP 请求。

  • WAF 和 Rate Limiting 的区别? WAF 是「内容过滤」:根据请求内容(SQL 注入、XSS)拦截;Rate Limiting 是「频率控制」:根据请求频率(每秒多少次)拦截。两者互补。

  • JWT 鉴权在 Worker 里怎么做? 用 hono/jwt 或 jose 库验证 token 签名和过期时间。Secret 用 wrangler secret put 存储,不要硬编码。验证通过后再访问下游资源。

自测三问

  1. 为什么 CF-Connecting-IP 比 X-Forwarded-For 更可靠?
  2. TLS Full (Strict) 和 Flexible 的核心区别是什么?为什么 Strict 更安全?
  3. 如果用户反馈「搜索 select 相关关键词被拦截」,你会怎么排查?

小结一句话

Cloudflare 安全体系是「边缘拦截」:WAF 拦内容攻击、Rate Limiting 拦频率攻击、Bot Management 拦机器人、TLS 保证传输加密,四层防护把 90% 的威胁挡在源站之外。

延伸

  • WAF 官方文档
  • Rate Limiting 官方文档
  • Bot Management 官方文档
  • 下一课:运维与集成,学习 CI/CD、日志监控、Pages 与 Service Bindings。
加载本节练习…
← 上一课Stream 与媒体下一课 →运维与集成