顺序缓解 (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}/profile 到 POST /api/v1/transferFunds 的顺序。
要跟踪发往 API 端点 的请求,必须将它们添加到端点管理中。通过 Cloudflare 仪表板,以 API 发现、架构验证 或 手动 的方式将您的端点添加到端点管理。
API Shield 使用您配置的 会话标识符 来跟踪会话。您必须配置一个针对每个 API 终端用户唯一的会话标识符,以便顺序缓解按预期运行。
默认情况下,API Shield 会保存通过会话标识符识别出的每个 API 用户请求的当前和前九个端点。如果默认的回溯窗口不能满足您的需求,请联系您的账户团队。
顺序缓会在构建顺序时进一步对发往同一端点的请求进行去重。
为了说明这一点,在上面列出的原始顺序示例中,顺序缓解将保存以下顺序:
GET /api/v1/users/{user_id}/accountsGET /api/v1/accounts/{account_id}/balancePOST /api/v1/transferFunds
顺序缓解对发往 GET /api/v1/accounts/{account_id}/balance 的两次请求进行了去重,并将其保存为单次请求。
顺序缓解规则的回溯期为 10 分钟。如果使用相同会话标识符的任意两个请求发生间隔不超过 10 分钟,它们就会延长该顺序。如果在前一个请求之后超过 10 分钟才发生请求,则会启动一个新顺序。
例如,如果您创建了一个规则要求在请求另一个端点之前先请求一个端点,并且这两个请求之间间隔了超过 10 分钟,则该规则将不匹配。
序列缓解(Sequence mitigation)目前处于闭测阶段,仅对企业客户开放。如果您希望加入该 Beta 测试,请联系您的账户团队。