介绍 AWS WAF 的全新控制台体验
现在,您可以使用更新后的体验访问控制台中任意位置的 AWS WAF 功能。有关更多详细信息,请参阅 使用更新的控制台体验。
为非阻止操作插入自定义请求标头
本节介绍了当规则操作未阻止原始 HTTP 请求时,如何指示 AWS WAF 向该请求中插入自定义标头。使用此选项,您只需添加到请求中。您不能修改或替换原始请求的任何部分。插入自定义标头的使用案例包括向下游应用程序发出信号,要求其根据插入的标头以不同方式处理该请求,以及标记该请求以进行分析。
重要
此选项适用于规则操作 Allow、Count、CAPTCHA 和 Challenge,以及设置为 Allow 的保护包(web ACL)默认操作。有关规则操作的更多信息,请参阅 在 AWS WAF 中使用规则操作。有关默认保护包(web ACL)操作的更多信息,请参阅 在 AWS WAF 中设置保护包(web ACL)默认操作。
使用自定义请求标头名称时的注意事项
在请求标头中添加了前缀
AWS WAF 会为其插入的所有请求标头前添加前缀 x-amzn-waf-,以避免与该请求中已有的标头发生混淆。例如,如果指定标头名称为 sample,AWS WAF 会插入标头 x-amzn-waf-sample。
重要
作为安全措施,您可以添加字符串匹配规则,以阻止标头以 x-amzn-waf- 开头的请求。这会阻止非 AWS WAF 源的请求,这些请求模仿处理自定义请求标头时由 AWS WAF 插入的 x-amzn-waf- 前缀字符串。
以下示例显示配置为阻止流量的字符串匹配规则,其中 x-amzn-waf- 前缀并非由 AWS WAF 插入:
"Rules": [ { "Name": "CustomHeader", "Priority": 0, "Statement": { "ByteMatchStatement": { "SearchString": " x-amzn-waf-", "FieldToMatch": { "Headers": { "MatchPattern": { "All": {} }, "MatchScope": "KEY", "OversizeHandling": "MATCH" } }, "TextTransformations": [ { "Priority": 0, "Type": "NONE" } ], "PositionalConstraint": "STARTS_WITH" } }, "Action": { "Block": {} }, "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "CustomHeader" } } ]
有关使用字符串匹配规则的信息,请参阅 字符串匹配规则语句。
同名标头
如果该请求中已有的标头与 AWS WAF 将要插入的标头同名,则 AWS WAF 会覆盖原标头。因此,如果您在多个具有相同名称的规则中定义标头,则检查请求并查找匹配项的最后一条规则将添加其标头,而之前的任何规则都不会添加标头。
使用带有非终止规则操作的自定义标头
与 Allow 操作不同,Count 操作不会阻止 AWS WAF 使用保护包(web ACL)中的其余规则处理 web 请求。同样,当 CAPTCHA 和 Challenge 确定请求令牌有效时,这些操作也不会阻止 AWS WAF 处理 web 请求。因此,如果采用具有这些操作之一的规则插入自定义标头,后续规则可能也会插入自定义标头。有关规则操作行为的更多信息,请参阅 在 AWS WAF 中使用规则操作。
例如,假设您拥有以下规则,按所示顺序排列优先级:
-
RuleA,其中包含一个 Count 操作和一个名为
RuleAHeader的自定义标头。 -
RuleB,其中包含一个 Allow 操作和一个名为
RuleBHeader的自定义标头。
如果请求同时匹配 RuleA 和 RuleB,则 AWS WAF 插入标头 x-amzn-waf-RuleAHeader 和 x-amzn-waf-RuleBHeader,然后将请求转发到受保护的资源。
AWS WAF 在 web 请求完成检查后,将自定义标头插入到 web 请求中。因此,如果您将自定义请求处理与将操作设置为 Count 的规则一起使用,则后续规则不会检查您添加的自定义标头。
自定义请求处理示例
您可以为规则的操作或保护包(web ACL)的默认操作定义自定义请求处理。下表显示保护包(web ACL)默认操作中添加的用于自定义处理的 JSON。
{ "Name": "SampleWebACL", "Scope": "REGIONAL", "DefaultAction": { "Allow": { "CustomRequestHandling": { "InsertHeaders": [ { "Name": "fruit", "Value": "watermelon" }, { "Name": "pie", "Value": "apple" } ] } } }, "Description": "Sample protection pack (web ACL) with custom request handling configured for default action.", "Rules": [], "VisibilityConfig": { "SampledRequestsEnabled": true, "CloudWatchMetricsEnabled": true, "MetricName": "SampleWebACL" } }