本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
为发送自定义回复 Block actions
本节介绍如何指示 AWS WAF 将设置为的规则操作或 Web ACL 默认操作的自定义HTTP响应发送回客户端 Block。 有关规则操作的更多信息,请参阅在中使用规则操作 AWS WAF。有关默认 Web ACL 操作的更多信息,请参阅在中设置 Web ACL 默认操作 AWS WAF。
当你为定义自定义响应处理时 Block action 中,您可以定义状态码、标头和响应正文。有关可与配合使用的状态码列表 AWS WAF,请参阅以下部分,自定义响应支持的状态码。
使用案例
自定义响应的用例包括:
-
将默认状态码发送回客户端。
-
将自定义响应标头发送回客户端。您可以为指定任何标头名称,除
content-type
外。 -
将静态错误页面发送回客户端。
-
将客户端重定向到其他URL客户端。为此,您需要指定一个
3xx
重定向状态码,例如301 (Moved Permanently)
或302 (Found)
,然后指定一个以新标头命名Location
的新标头。URL
与您在受保护资源中定义的响应进行交互
您为指定的自定义响应 AWS WAF Block 操作优先于您在受保护资源中定义的任何响应规范。
的主机服务 AWS 你用来保护的资源 AWS WAF 可能允许对 Web 请求进行自定义响应处理。示例包括:
你不能合并 AWS WAF 自定义响应设置,在受保护的环境中使用自定义响应设置 AWS 资源。任何单个 Web 请求的响应规范要么完全来自 AWS WAF 或者完全来自受保护的资源。
对于网络请求 AWS WAF 块,以下显示了优先顺序。
-
AWS WAF 自定义响应 — 如果 AWS WAF Block action 启用了自定义响应,受保护的资源将配置的自定义响应发送回客户端。您在受保护的资源中定义的任何响应设置(如有)均无效。
-
在受保护资源中定义的自定义响应 – 否则,如果受保护资源有指定的自定义响应设置,则受保护资源将使用这些设置来响应客户端。
-
AWS WAF 默认值 Block response — 否则,受保护的资源会向客户端响应 AWS WAF 默认值 Block 响应
403 (Forbidden)
。
对于网络请求 AWS WAF 允许,您对受保护资源的配置决定了它发送回客户端的响应。您无法在中配置响应设置 AWS WAF 用于允许的请求。您可以在中配置的唯一自定义设置 AWS WAF 对于允许的请求,是在将请求转发到受保护的资源之前,在原始请求中插入自定义标头。上一节 为非阻塞操作插入自定义请求标头 中介绍了此选项。
自定义响应标头
您可以为指定任何标头名称,除 content-type
外。
自定义响应正文
您可以在要使用自定义响应的 Web ACL 或规则组的上下文中定义自定义响应的正文。定义自定义响应正文后,您可以通过引用在创建响应正文的 Web ACL 或规则组中的任何其他位置使用它。在个人中 Block 操作设置,您可以引用要使用的自定义正文,然后定义自定义响应的状态代码和标头。
在控制台中创建自定义响应时,您可以从已定义的响应正文中进行选择,也可以创建新的响应正文。在控制台之外,您可以在 Web ACL 或规则组级别定义自定义响应正文,然后从 Web ACL 或规则组中的操作设置中引用它们。这将在下一节的示例JSON中显示。
自定义响应示例
以下示例列出了JSON具有自定义响应设置的规则组的。为整个规则组定义自定义响应正文,然后由规则操作中的键来引用。
{ "ARN": "test_rulegroup_arn", "Capacity": 1, "CustomResponseBodies": { "CustomResponseBodyKey1": { "Content": "This is a plain text response body.", "ContentType": "TEXT_PLAIN" } }, "Description": "This is a test rule group.", "Id": "test_rulegroup_id", "Name": "TestRuleGroup", "Rules": [ { "Action": { "Block": { "CustomResponse": { "CustomResponseBodyKey": "CustomResponseBodyKey1", "ResponseCode": 404, "ResponseHeaders": [ { "Name": "BlockActionHeader1Name", "Value": "BlockActionHeader1Value" } ] } } }, "Name": "GeoMatchRule", "Priority": 1, "Statement": { "GeoMatchStatement": { "CountryCodes": [ "US" ] } }, "VisibilityConfig": { "CloudWatchMetricsEnabled": true, "MetricName": "TestRuleGroupReferenceMetric", "SampledRequestsEnabled": true } } ], "VisibilityConfig": { "CloudWatchMetricsEnabled": true, "MetricName": "TestRuleGroupMetric", "SampledRequestsEnabled": true } }