一旦您的 API 投入生产并接收流量,您就需要决定首先保护哪些端点、应用哪些限制,以及如何监控滥用情况而不阻止合法客户端。本指南将逐步引导您完成五个阶段:清点您的端点、强制执行加密连接、将访问限制为预期的流量模式、阻止自动滥用以及监控结果。
核心工作流程使用 Cloudflare 应用程序安全(也称为 Web 应用程序防火墙或 WAF)功能、SSL/TLS 设置和机器人检测,这些功能在 Free、Pro 和 Business 计划上均可用。Enterprise 提示涵盖了 API Shield 功能,适用于需要模式验证、JSON Web Token (JWT) 验证和序列分析的团队。
在配置任何安全规则之前,建立 API 端点的清单。如果没有完整的列表,您就无法在正确的路径上制定保护措施,也无法在未知端点开始接收流量时检测到。
-
查看应用程序的路由配置,并列出每个端点及其 HTTP 方法和预期参数。
-
按访问级别(公共、已验证、内部)对每个端点进行分类。优先考虑接受文件上传、处理付款或返回敏感数据的端点。
访问级别 描述 示例端点 公共 无需身份验证 /api/status,/api/products已验证 需要令牌或会话 /api/account,/api/orders内部 不应公开访问 /api/admin,/api/debug -
将清单记录在电子表格或 OpenAPI 模式文件中,以便在后面部分编写规则表达式时参考。如果您已经有 OpenAPI 规范,则可以直接将其用于 API Shield 的模式验证(在下面的 Enterprise 提示中介绍)。
API 请求带有凭据、令牌和响应数据,攻击者可以通过未加密的连接拦截这些数据。如果服务器接受,一些 API 客户端会默默降级到 HTTP,以明文形式发送敏感数据。在边缘强制执行 HTTPS 可防止这种情况。
将您的加密模式设置为 Full (strict)(完全(严格)),以加密访问者与 Cloudflare 之间以及 Cloudflare 与您的源服务器之间的流量。此模式要求源服务器上拥有有效证书。
-
在 Cloudflare 仪表板中,转到 SSL/TLS Overview(SSL/TLS 概述) 页面。
Go to Overview ↗ -
在 SSL/TLS encryption(SSL/TLS 加密) 中,选择 Full (strict)(完全(严格))。
有关加密模式及其要求的更多信息,请参考 SSL/TLS 加密模式。
始终使用 HTTPS 会将所有子域和主机的 HTTP 请求重定向到 HTTPS。这可防止客户端通过未加密连接意外发送 API 请求。
-
在 Cloudflare 仪表板中,转到 SSL/TLS Overview(SSL/TLS 概述) 页面。
Go to Overview ↗ -
验证您的 SSL/TLS 加密模式 未设置为关闭。当加密关闭时,“始终使用 HTTPS”选项不可见。
-
转到 Edge Certificates(边缘证书) 页面。
Go to Edge Certificates ↗ -
开启 Always Use HTTPS(始终使用 HTTPS)。
由于 API 可能携带凭据和令牌等敏感信息,因此您应在选择合适的最低 TLS 版本时考虑这一点。
TLS 1.0 和 1.1 具有已知漏洞。将最低版本设置为 TLS 1.2 将拒绝来自使用旧协议的客户端连接。
-
在 Cloudflare 仪表板中,转到 Edge Certificates(边缘证书) 页面。
Go to Edge Certificates ↗ -
对于 Minimum TLS Version(最低 TLS 版本),选择 TLS 1.2。
有关更多信息,请参考 最低 TLS 版本。
自动 HTTPS 重写可将 HTML 响应中的 HTTP 链接更改为 HTTPS。对于返回 JSON 或其他非 HTML 内容的 API 端点,这种重写是不必要的,如果 API 客户端遵循重写的 URL,可能会导致意外行为。如果您的域仅处理 API 流量,请关闭此设置。
-
在 Cloudflare 仪表板中,转到 Edge Certificates(边缘证书) 页面。
Go to Edge Certificates ↗ -
关闭 Automatic HTTPS Rewrites(自动 HTTPS 重写)。
合法的 API 客户端会发送可预测的请求模式:特定的 HTTP 方法、预期的头部信息如 Content-Type: application/json,以及向已记录路径发出的请求。应用程序安全自定义规则允许您阻止偏离这些模式的流量。速率限制规则限制每个客户端的请求量以防止滥用。
API 客户端通常包含 Content-Type 标头,并可能包含 Authorization 标头或自定义 API 密钥标头。向缺少这些标头的 API 路径发出的请求并非来自您预期的客户端。
以下自定义安全规则会阻止发送至不包含 Content-Type 标头的 /api/ 路径的请求。请根据您的 API 调整路径和标头检查。
-
在 Cloudflare 仪表板中,转到 Security(安全性) > Security rules(安全规则)。
Go to Security rules ↗ -
选择 Create rule(创建规则) > Custom rules(自定义规则)。
-
定义规则名称。例如,
Block API requests missing Content-Type。 -
在表达式编辑器中,输入:
(starts_with(http.request.uri.path, "/api/") and not len(http.request.headers["content-type"][0]) > 0) -
在 Then take action(接着采取措施) 下,选择 Block(阻止)。
-
选择 Deploy(部署)。
-
登录 Cloudflare 仪表板 ↗,然后选择您的账户和域。
-
转到 Security(安全性) > WAF > Custom rules(自定义规则)。
-
选择 Create rule(创建规则)。
-
定义规则名称。例如,
Block API requests missing Content-Type。 -
在表达式编辑器中,输入:
(starts_with(http.request.uri.path, "/api/") and not len(http.request.headers["content-type"][0]) > 0) -
在 Then take action(接着采取措施) 下,选择 Block(阻止)。
-
选择 Deploy(部署)。
如果您的 /api/users 端点仅接受 GET 和 POST 请求,请屏蔽该路径上的所有其他 HTTP 方法。这可防止攻击者使用 PUT、DELETE 或 PATCH 请求来探测不支持这些方法的端点。
-
在 Cloudflare 仪表板中,转到 Security(安全性) > Security rules(安全规则)。
Go to Security rules ↗ -
选择 Create rule(创建规则) > Custom rules(自定义规则)。
-
定义规则名称。例如,
Block unexpected methods on /api/users。 -
在表达式编辑器中,输入:
(http.request.uri.path eq "/api/users" and http.request.method ne "GET" and http.request.method ne "POST")调整路径和允许的方法以匹配您的端点。
-
在 Then take action(接着采取措施) 下,选择 Block(阻止)。
-
选择 Deploy(部署)。
-
登录 Cloudflare 仪表板 ↗,然后选择您的账户和域。
-
转到 Security(安全性) > WAF > Custom rules(自定义规则)。
-
选择 Create rule(创建规则)。
-
定义规则名称。例如,
Block unexpected methods on /api/users。 -
在表达式编辑器中,输入:
(http.request.uri.path eq "/api/users" and http.request.method ne "GET" and http.request.method ne "POST")调整路径和允许的方法以匹配您的端点。
-
在 Then take action(接着采取措施) 下,选择 Block(阻止)。
-
选择 Deploy(部署)。
对受限方法的每个端点重复此模式。如果它们共享相同的允许方法,您可以使用 or 运算符将多个路径合并为单个规则。
API 端点遭受的定向滥用要多于网页,因为攻击者无需渲染浏览器即可全速调用。速率限制功能限制了单个客户端在时间窗口内发送请求的数量。
为经过身份验证和未经身份验证的端点分别创建速率限制规则。未经身份验证的端点(登录、注册、密码重置)需要更严格的限制,因为它们是凭据填充和暴力攻击的首要目标。
以下示例将会把到 /api/auth/login 的请求限制为每个 IP 地址每分钟 10 个。您可以针对端点调整路径、请求阈值和时间段。
-
在 Cloudflare 仪表板中,转到 Security rules(安全规则) 页面。
Go to Security rules ↗ -
选择 Create rule(创建规则) > Rate limiting rules(速率限制规则)。
-
输入描述性名称。例如,
Rate limit login endpoint。 -
在 Field(字段) 下拉菜单中,选择 URI Path(URI 路径)。将 Operator(运算符) 设置为 equals(等于),并将 Value(值) 设置为
/api/auth/login。 -
在 With the same characteristics(具有相同特征的内容) 下,添加 IP。
-
在 When rate exceeds(速率超过此数值时) 下,将 Requests(请求) 设置为
10,将 Period(时段) 设置为 1 minute(1 分钟)。 -
在 Then take action(接着采取措施) 下,选择 Block(阻止)。
-
将 Duration(持续时间)(缓解超时时间)设置为 1 minute(1 分钟)。
-
选择 Deploy(部署)。
-
登录 Cloudflare 仪表板 ↗,然后选择您的账户和区域。
-
转到 Security(安全性) > WAF > Rate limiting rules(速率限制规则)。
-
选择 Create rule(创建规则)。
-
输入描述性名称。例如,
Rate limit login endpoint。 -
在 Field(字段) 下拉菜单中,选择 URI Path(URI 路径)。将 Operator(运算符) 设置为 equals(等于),并将 Value(值) 设置为
/api/auth/login。 -
在 With the same characteristics(具有相同特征的内容) 下,添加 IP。
-
在 When rate exceeds(速率超过此数值时) 下,将 Requests(请求) 设置为
10,将 Period(时段) 设置为 1 minute(1 分钟)。 -
在 Then take action(接着采取措施) 下,选择 Block(阻止)。
-
将 Duration(持续时间)(缓解超时时间)设置为 1 minute(1 分钟)。
-
选择 Deploy(部署)。
有关速率限制参数和计数特征的更多信息,请参考速率限制参数。
有关使用 API 密钥作为计数特征的特定于 API 的示例,请参阅速率限制规则示例。
机器人可以跳过浏览器的额外开销,直接全速调用 API 端点。针对 API 常见的自动攻击包括针对身份验证端点的凭证填充、通过列表端点进行数据爬取,以及借助购物车或结账端点操控库存。
Bot Fight Mode 对与已知机器人模式匹配的请求发起质询。此功能适用于您的整个域,并在所有计划中免费提供。
-
在 Cloudflare 仪表板中,转到 Security settings(安全设置) 页面。
Go to Settings ↗ -
按 Bot traffic(机器人流量) 筛选。
-
转到 Bot fight mode。
-
开启 Bot fight mode。
- 登录 Cloudflare 仪表板 ↗,选择您的账户和域名。
- 转到 Security(安全性) > Bots(机器人)。
- 对于 Bot Fight Mode,选择 On(开启)。
Bot Fight Mode 可能会干扰对您的 API 进行的合法自动流量,例如监控工具、CI/CD 管道或合作伙伴集成。如果您拥有合法的机器人客户端,请在打开 Bot Fight Mode 之前创建异常规则(请参阅下一部分)。
有关 Bot Fight Mode 行为和限制的更多信息,请参阅 Bot Fight Mode。
如果您的 API 接收来自已知自动化客户端(监控服务、合作伙伴 API、CI/CD 系统)的流量,请创建一个带有“跳过 (Skip)”操作的自定义安全规则以将其排除在机器人保护之外。在启用下一节所述的 Super Bot Fight Mode 之前,请先创建该异常规则。
-
在 Cloudflare 仪表板中,转到 Security(安全性) > Security rules(安全规则)。
Go to Security rules ↗ -
选择 Create rule(创建规则) > Custom rules(自定义规则)。
-
定义规则名称。例如,
Skip bot protections for monitoring service。 -
建立一个匹配您的已知机器人流量的表达式。例如,要对来自特定 IP 范围且具有已知 User-Agent 的请求跳过保护:
(ip.src in {203.0.113.0/24} and http.user_agent contains "MonitoringBot")请将 IP 范围和 User-Agent 替换为与您合法机器人客户端相匹配的值。
-
在 Then take action(接着采取措施) 下,选择 Skip(跳过),然后选择 All Super Bot Fight Mode rules(所有 Super Bot Fight Mode 规则)。
-
选择 Deploy(部署)。
-
登录 Cloudflare 仪表板 ↗,然后选择您的账户和域。
-
转到 Security(安全性) > WAF > Custom rules(自定义规则)。
-
选择 Create rule(创建规则)。
-
定义规则名称。例如,
Skip bot protections for monitoring service。 -
建立一个匹配您的已知机器人流量的表达式。例如,要对来自特定 IP 范围且具有已知 User-Agent 的请求跳过保护:
(ip.src in {203.0.113.0/24} and http.user_agent contains "MonitoringBot")请将 IP 范围和 User-Agent 替换为与您合法机器人客户端相匹配的值。
-
在 Then take action(接着采取措施) 下,选择 Skip(跳过),然后选择 All Super Bot Fight Mode rules(所有 Super Bot Fight Mode 规则)。
-
选择 Deploy(部署)。
Super Bot Fight Mode 提供适用于整个域的精细控制,让您能够针对不同机器人类型应用不同操作。
若要配置 Super Bot Fight Mode:
-
在 Cloudflare 仪表板中,转到 Security settings(安全设置) 页面。
Go to Settings ↗ -
按 Bot traffic(机器人流量) 筛选。
-
转到 Super Bot fight mode(超级 Bot 拦截模式)。
-
开启 Super Bot fight mode(超级 Bot 拦截模式)。
-
通过选择关联的编辑图标,选择您的域名应如何响应各种类型的流量:
- 有关已验证机器人的更多详情,请参阅已验证机器人。
- 有关支持的文件类型的更多详情,请参阅静态资源保护。
- 有关不可见代码注入的更多详情,请参阅 JavaScript 检测。
- 有关 WordPress 优化的更多详情,请参阅面向 WordPress 的 Super Bot Fight Mode。
-
登录 Cloudflare 仪表板 ↗,选择您的账户和域名。
-
转到 Security(安全性) > Bots(机器人)。
-
选择 Configure Super Bot Fight Mode(配置 Super Bot Fight Mode)。
-
选择您的域名应如何响应各种类型的流量:
- 有关已验证机器人的更多详情,请参阅已验证机器人。
- 有关支持的文件类型的更多详情,请参阅静态资源保护。
- 有关不可见代码注入的更多详情,请参阅 JavaScript 检测。
- 有关 WordPress 优化的更多详情,请参阅面向 WordPress 的 Super Bot Fight Mode。
使用 Super Bot Fight Mode,您可以针对不同类型的机器人配置不同操作:
- 阻止或允许经过验证的机器人
- 为 确定属于自动产生的流量 配置一项单独操作(允许、阻止或质询)(机器人分数为 1)
- 对于 Business 及以上计划:为 可能属于自动产生的流量 配置一项单独操作(机器人分数介于 2 到 29 之间)
Super Bot Fight Mode 应用于整个域,不支持针对特定路径的规则。如果需要将不同机器人阈值应用于不同 API 路径,则需要订阅 Bot Management (Enterprise)。
应用程序安全泄漏凭据检测会检查传入请求中的用户名和密码组合是否出现在已知的数据泄露中。使用此检测可以对包含受损凭据的认证端点请求进行限速或发起质询。
以下限速规则将会对每个 IP 中,包含先前泄漏过的用户名和密码组合的请求数限制为每分钟 5 次:
| 设置 | 值 |
|---|---|
| 表达式 | cf.waf.credential_check.username_and_password_leaked |
| 计数特征 | IP |
| 每个时间段的请求数 | 5 个请求 / 1 分钟 |
| 采取操作 | 阻止 |
包含账户接管 (ATO) 检测 ID 的完整表达式,请参阅 缓解规则示例。
在部署安全规则之后,审查结果以识别误报并调整阈值。误报(合法的客户端遭到屏蔽)与漏报(滥用行为得逞)都需要进行修正调整。
安全事件 呈现了与您的规则相匹配的每个请求,以及所采取的操作和予以触发的规则。利用 API 路径的前缀作为筛选条件,以查看 Cloudflare 所屏蔽的项目,以及个中原由。
-
在 Cloudflare 仪表板中,转到 Analytics(分析) 页面。
Go to Analytics ↗ -
选择 Events(事件) 选项卡。
-
添加一条过滤器:URI Path(URI 路径) 以
/api/开头。 -
审查事件。寻找受屏蔽的合法客户端(误报)。误报的常见指征:
- 来自已知合作伙伴 IP 地址的请求
- 带有有效 API 密钥或认证标题的请求
- 带有已知 User-Agent 字符串且来自监控服务的请求
- 登录 Cloudflare 仪表板 ↗,然后选择您的账户和区域。
- 转到 Security(安全性) > Events(事件)。
- 添加一条过滤器:URI Path(URI 路径) 以
/api/开头。 - 审查事件。寻找受屏蔽的合法客户端(误报)。误报的常见指征:
- 来自已知合作伙伴 IP 地址的请求
- 带有有效 API 密钥或认证标题的请求
- 带有已知 User-Agent 字符串且来自监控服务的请求
如果发现误报,请更新自定义规则以排除受影响的流量。请参阅前面的为合法机器人客户端创建例外规则流程。
限速阈值如设置过严,将屏蔽合法的客户端;设置过宽,又将放任滥用行为。请在安全事件中审查限速事件,以寻找适当的平衡。
-
在 Cloudflare 仪表板中,转到 Analytics(分析) 页面。
Go to Analytics ↗ -
选择 Events(事件) 选项卡。
-
按照 操作 等于 阻止,且 服务 等于 速率限制 的方式进行过滤。
-
检查被屏蔽的请求是来自合法客户端,抑或属于滥用流量。
-
如果合法的客户端受到了限速,请编辑相关的限速规则,提升请求数阈值或放宽受影响规则的时长限制。
-
如果滥用流量得逞,请降低规则数阈值,或缩减时长限制。
- 登录 Cloudflare 仪表板 ↗,然后选择您的账户和区域。
- 转到 Security(安全性) > Events(事件)。
- 按照 操作 等于 阻止,且 服务 等于 速率限制 的方式进行过滤。
- 检查被屏蔽的请求是来自合法客户端,抑或属于滥用流量。
- 如果合法的客户端受到了限速,请编辑相关的限速规则,提升请求数阈值或放宽受影响规则的时长限制。
- 如果滥用流量得逞,请降低规则数阈值,或缩减时长限制。
当安全事件数量超过特定阈值时,Cloudflare 通知可以提醒您,表明系统可能正在遭受攻击或规则配置有误。
-
在 Cloudflare 仪表板中,转到 Notifications(通知) 页面。
Go to Notifications ↗ -
选择 Add(添加)。
-
按 WAF 筛选,并选择 Security Events Alert(安全事件警报)。
-
为通知指定名称,并选择投递方式(电子邮件、webhook 或 PagerDuty)。
-
配置要接收通知的域名。也可以按特定操作筛选事件(例如 Block(阻止) 或 Skip(跳过))。
-
选择 Create(创建)。
有关可用通知类型的完整列表,请参阅 可用通知。
应用程序安全
- 自定义规则 — 根据请求属性创建规则,以阻止、质询或跳过针对特定流量的安全功能
- 速率限制规则 — 按客户端定义请求速率阈值,并选择强制执行操作
- 速率限制最佳实践 — 针对凭据填充、API 防护和 GraphQL 的常见限速模式
- 速率限制规则示例 — 适用于登录页、API 密钥和基于复杂度限速的示例规则与表达式
- 安全功能互操作性 — 自定义规则、速率限制规则、Super Bot Fight Mode 与托管规则如何交互
- 泄漏凭据检测 — 检测包含已知数据泄露凭据的请求
- 安全事件 — 查看匹配的请求及规则采取的操作
Bots(机器人)
- Bot Fight Mode — 自动质询匹配已知机器人模式的请求(Free 计划)
- Super Bot Fight Mode — 更精细的机器人控制,包括已验证机器人白名单(Pro、Business、Enterprise)
- Bot Management — 机器人分数、检测 ID 和自定义规则模板(Enterprise)
- Bot Management 变量 — 规则表达式中可用于机器人检测的字段(Enterprise)
SSL/TLS
- SSL/TLS 入门 — 边缘证书、加密模式与 HTTPS 强制执行
- 始终使用 HTTPS — 将所有 HTTP 请求重定向到 HTTPS
- 最低 TLS 版本 — 拒绝使用较旧 TLS 协议的连接
API Shield (Enterprise)
- API Shield 概述 — API 发现、架构验证、JWT 验证和序列分析
- API Shield 入门 — 从会话标识符到架构验证的入门流程
- API 发现 — 通过流量分析自动发现端点
- 架构验证 — 根据 OpenAPI 架构验证传入请求
- JWT 验证 — 在边缘验证 JSON Web Token
- 序列分析 — 跟踪并分析 API 请求序列
- 容量滥用检测 — 按会话、按端点的自适应速率限制
- Authentication Posture — 帮助识别 API 身份验证配置错误并发出警报
- BOLA 漏洞检测 — 检测可能存在 Broken Object Level Authorization (BOLA) 风险的端点
- 漏洞扫描程序 — 测试 API 端点是否存在常见漏洞