Cloudflare 不当滥用检测可生成针对每个端点、每个会话的速率限制建议,并随着您流量模式的变化而自动调整。
Cloudflare 根据用户对单个端点的流量情况来查找端点滥用。
例如,您的 API 在 /reset-password 端点上看到的流量水平可能会与 /login 端点不同。此外,在成功的营销活动后,您的 /login 端点可能会看到高于平均水平的流量。
这两种情况说明了传统速率限制的局限性。不仅不同端点之间的流量有所不同,而且同一端点的流量也可能随时间发生变化。不当滥用检测利用无监督学习(在没有预定义规则的情况下分析流量模式)来为每个端点开发单独的基线,并随着时间的推移适应用户行为的变化,从而解决这些问题。
不当滥用检测的速率限制是基于每个会话而不是每个 IP 地址生成的。当您的 API 流量增加时,这减少了误报,因为速率限制跟踪的是单个会话而不是共享的 IP 地址。
不当滥用检测速率限制是防止公然的不当滥用同时最小化误报的一种方法。如果您试图完全防止滥用的机器人流量,请参阅 Cloudflare 的机器人解决方案。
不当滥用检测分析您 API 的单个会话流量统计数据,以推荐针对每个端点、每个会话的速率限制。
要访问您的端点:
旧版仪表板:Security(安全) > API Shield > Endpoint Management(端点管理)
新版仪表板:Security(安全) > Web 资产 (Web Assets) > Endpoints(端点)
如果您的流量模式发生变化,建议将继续更新。
不当滥用检测仅在收集到足够的流量数据以产生可靠的建议后,才会生成速率限制阈值。如果发现的端点缺少建议,则可能是流量未能满足必要的标准。
仅当端点在过去七天内(或自初始发现以来)满足以下所有要求时,才会建议阈值:
- 端点必须收到足够的有效流量(满足 API 发现标准的流量)。间歇性或不规则的流量可能会妨碍生成建议。
- 在过去七天内的任何 24 小时期间,必须有至少 50 个不同的会话访问该端点。
- 必须配置 会话标识符(例如作为请求标头或 cookie 提供的授权令牌),以便 Cloudflare 准确检测单个会话并执行所需的每个会话速率分析。
添加会话标识符后,请等待 24 小时以使速率限制建议在 Cloudflare 仪表板的端点上显示。
在 端点 中选择一个端点行以查看其速率限制建议。详细视图显示了整体推荐值以及基于百分位数的值(p50、p90、p99)。
Cloudflare 每天都会根据过去 24 小时内的请求重新计算推荐值。如果您的流量概况保持一致,建议可能不会发生变化。
Cloudflare 建议使用整体速率限制建议,而不是单个百分位数数值。整体建议考虑了您所有 API 会话的变化。选择单个百分位数数值可能会由于大量的异常值而导致误报。
在 端点 中,您可以审查每个建议的置信度,以及过去七天内观察到了多少个唯一会话。一般来说,唯一会话较少且用户行为差异较大的端点将具有较低的置信度得分。
实施低置信度速率限制仍然有助于防止 API 滥用。如果置信度较低,请先在 log 模式下启动速率限制规则,并观察违规情况以查找误报,然后再切换到 block。
有关如何创建高级速率限制规则的更多信息,请参阅规则文档。
如果您想随着时间的推移动态更新速率限制,速率限制建议可以通过 API 获取。
Required API token permissions
At least one of the following token permissions is required:Account API GatewayAccount API Gateway ReadDomain API GatewayDomain API Gateway Read
curl "https://api.cloudflare.com/client/v4/zones/$ZONE_ID/api_gateway/operations/$OPERATION_ID" \
--request GET \
--header "Authorization: Bearer $CLOUDFLARE_API_TOKEN"您可以基于 JSON Web Token (JWT) 中的任何声明(claim)对请求进行速率限制,例如:
- 注册声明,如
aud或sub - 自定义声明,如
userEmail,包括嵌套自定义声明,如user.email
基于 JWT 声明值的速率限制仅对有效的 JSON Web Token 生效。如果您没有在路径上阻止无效的 JSON Web Token,那么如果在业务点(PoP)检测到高流量,JWT 声明将全部被计数并可能会被阻止。
您还必须对唯一标识用户的 JWT 声明进行计数。如果您选择了一个对许多用户都相同的声明,他们的速率限制将全部被合并计数。
如果您的网站或应用程序提供多个层级,并且您希望基于这些层级实施速率限制,例如:
- 如果
"aud": "free-tier",限制为每分钟 5 个请求。 - 如果
"aud": "premium-tier",限制为每分钟 50 个请求。
您可以参考下面的速率限制规则示例:
(http.request.method eq "GET" and
http.host eq "<YOUR_DOMAIN>" and
http.request.uri.path matches "</EXAMPLE_PATH>" and
lookup_json_string(http.request.jwt.claims["<JWT_TOKEN_CONFIGURATION_ID>"][0], "aud") eq "free-tier"配置会话标识符后,API Shield 将始终计算建议。要启用基于会话的速率限制,请订阅高级速率限制。
不当滥用检测仅适用于企业版客户。如果您是对该产品感兴趣的企业版客户,请联系您的账户团队。