跳转到内容
搜索文档

顺序缓解 (Sequence mitigation)

最后更新 查看 MarkdownAgent 设置

顺序缓解 (Sequence mitigation) 允许您为与您的 API 通信的已验证身份客户端强制执行请求模式。

您可以使用顺序规则为 API 客户端建立一组已知的行为,或检测并缓解恶意行为。

例如,您可能期望在银行资金转账期间发出的 API 请求符合以下时间顺序:

顺序 方法 路径 描述
1 GET /api/v1/users/{user_id}/accounts user_id 是当前活动用户。
2 GET /api/v1/accounts/{account_id}/balance account_id 是该用户的账户之一。
3 GET /api/v1/accounts/{account_id}/balance account_id 属于该用户的另一个不同账户。
4 POST /api/v1/transferFunds 这包含一个请求正文,详细说明要从中转账的账户、要转入的账户以及要转账的金额。

您可能希望强制要求 API 用户在请求 GET /api/v1/accounts/{account_id}/balance 之前先请求 GET /api/v1/users/{user_id}/accounts,且在请求 POST /api/v1/transferFunds 之前先请求 GET /api/v1/accounts/{account_id}/balance

使用顺序缓解,您可以通过两个新的顺序缓解规则来强制执行该请求模式。

过程

您可以使用以下两种方法之一创建顺序规则,以随时间推移强制执行 API 的行为。

肯定安全模型会阻止发出超出您预期模式的 API 请求的用户。否定安全模型会阻止执行已知的恶意 API 调用顺序的用户。

使用 API Shield 规则通过 Cloudflare 仪表板构建的顺序规则利用回溯窗口来匹配顺序中的端点。只要两个端点在彼此相隔 10 次请求(发往端点管理内的端点)内且在 10 分钟内发出,该规则就会匹配。

如果您想添加多个端点、忽略回溯窗口并配置基于时间的限制,请参阅顺序缓解自定义规则

在银行资金转账的示例中,强制要求用户在请求 POST /api/v1/transferFunds 之前先请求 GET /api/v1/accounts/{account_id}/balance 被视为一种肯定安全模型,因为用户只有在列出账户余额后才能执行资金转账。

如果您看到超出应用程序正常范围的滥用行为,并且在研究要实施的正确肯定安全模型时需要停止请求,则否定安全模型可能会很有用。

例如,如果存在授权漏洞,允许用户通过 GET /api/v1/users/{var1}/profile 迭代其他包含账号的用户个人资料,然后用户尝试进行欺诈性资金转账,您可以创建一个规则来阻止或记录 GET /api/v1/users/{var1}/profilePOST /api/v1/transferFunds 的顺序。

限制

端点管理 (Endpoint Management)

要跟踪发往 API 端点 的请求,必须将它们添加到端点管理中。通过 Cloudflare 仪表板,以 API 发现架构验证手动 的方式将您的端点添加到端点管理。

会话标识符 (Session Identifiers)

API Shield 使用您配置的 会话标识符 来跟踪会话。您必须配置一个针对每个 API 终端用户唯一的会话标识符,以便顺序缓解按预期运行。

请求限制

默认情况下,API Shield 会保存通过会话标识符识别出的每个 API 用户请求的当前和前九个端点。如果默认的回溯窗口不能满足您的需求,请联系您的账户团队。

顺序缓会在构建顺序时进一步对发往同一端点的请求进行去重。

为了说明这一点,在上面列出的原始顺序示例中,顺序缓解将保存以下顺序:

  1. GET /api/v1/users/{user_id}/accounts
  2. GET /api/v1/accounts/{account_id}/balance
  3. POST /api/v1/transferFunds

顺序缓解对发往 GET /api/v1/accounts/{account_id}/balance 的两次请求进行了去重,并将其保存为单次请求。

时间限制

顺序缓解规则的回溯期为 10 分钟。如果使用相同会话标识符的任意两个请求发生间隔不超过 10 分钟,它们就会延长该顺序。如果在前一个请求之后超过 10 分钟才发生请求,则会启动一个新顺序。

例如,如果您创建了一个规则要求在请求另一个端点之前先请求一个端点,并且这两个请求之间间隔了超过 10 分钟,则该规则将不匹配。

可用性

序列缓解(Sequence mitigation)目前处于闭测阶段,仅对企业客户开放。如果您希望加入该 Beta 测试,请联系您的账户团队。

这篇文档对您有帮助吗?