本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
区块操作的自定义响应
你可以指示Amazon WAF将定制 HTTP 响应发送回客户端,以执行设置为的规则操作或 Web ACL 默认操作Block. 有关规则操作的更多信息,请参阅 Amazon WAF 规则操作。有关默认 Web ACL 操作的更多信息,请参阅决定 Web ACL 的默认操作.
当您为区块操作定义自定义响应处理时,您可以定义状态码、标头和响应正文。有关可与一起使用的状态码列表Amazon WAF,请参阅以下部分,自定义响应支持的状态码.
使用案例
自定义响应的使用场景包括:
-
将非默认状态码发送回客户端。
-
将静态错误页面发送回客户端。
-
将客户端重定向到不同的 URL。为此,您需要指定以下的某个
3xx重定向状态码,例如301 (Moved Permanently)要么302 (Found),然后指定一个名为的新标头Location使用新的 URL。
与您在受保护资源中定义的响应进行交互
您为指定的自定义响应Amazon WAF阻止操作优先于您在受保护资源中定义的任何响应规范。
的主机服务Amazon你用以保护的资源Amazon WAF可能允许对 Web 请求进行自定义响应处理。示例包括:
-
亚马逊 CloudFront 允许您根据状态代码自定义错误页面。想要了解有关信息,请参阅生成自定义错误响应在里面亚马逊 CloudFront 开发人员指南.
-
Amazon API Gateway 允许您为网关定义响应和状态代码。想要了解有关信息,请参阅API Gateway 中的网关响应在里面Amazon API Gateway.
您不能合并Amazon WAF在受保护环境中使用自定义响应设置的自定义响应设置Amazon资源。任何单个 Web 请求的响应规范要么完全来自Amazon WAF或者完全来自受保护的资源。
对于这样的网络请求Amazon WAF块,以下显示优先顺序。
-
Amazon WAF自定义响应— 如果Amazon WAFblock action 启用了自定义响应,受保护资源将配置的自定义响应发送回客户端。无论是在中定义的自定义响应,这都适用Amazon WAF仅指定 HTTP 代码,仅指定自定义页面,或两者兼而有之。您可能在受保护资源本身中定义的任何响应设置都不起作用。
-
在受保护资源中定义的自定义响应— 否则,如果受保护资源指定了自定义响应设置,则受保护资源将使用这些设置来响应客户端。
-
Amazon WAF默认区块响应— 否则,受保护的资源会使用以下命令响应客户端Amazon WAF默认区块响应
403 (Forbidden).
对于这样的网络请求Amazon WAF允许,您对受保护资源的配置决定了它发送回客户端的响应。您无法在中配置响应设置Amazon WAF用于允许的请求。你可以在中配置的唯一自定义项Amazon WAF允许的请求是在将请求转发到受保护资源之前,在原始请求中插入自定义标头。此选项已在上一节中介绍,用于允许、计数和的自定义请求标头插入CAPTCHA行动.
自定义响应正文
您可以在要使用自定义响应的 Web ACL 或规则组的上下文中定义自定义响应的正文。定义自定义响应正文后,可以在创建它的 Web ACL 或规则组中的任何其他位置通过引用使用它。在单个区块操作设置中,您可以引用要使用的自定义正文,然后定义自定义响应的状态代码和标题。
当您在控制台中创建自定义响应时,您可以从已经定义的响应正文中进行选择,也可以创建一个新的响应体。在控制台之外,您可以在 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 } }