

**引入全新的主机体验 AWS WAF**

现在，您可以使用更新的体验访问控制台中任意位置的 AWS WAF 功能。有关更多详细信息，请参阅[使用控制台](https://docs.aws.amazon.com/waf/latest/developerguide/working-with-console.html)。

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 在中使用匹配规则语句 AWS WAF
<a name="waf-rule-statements-match"></a>

本节介绍了什么是匹配语句及其工作方式。

匹配语句将 web 请求或其来源与您提供的条件进行比较。对于许多此类语句， AWS WAF 比较请求中匹配内容的特定组成部分。

匹配语句是可嵌套的。您可以将这些语句中的任何一个嵌套在逻辑规则语句中，也可以在范围缩小语句中使用它们。有关逻辑规则语句的信息，请参阅 [在中使用逻辑规则语句 AWS WAF](waf-rule-statements-logical.md)。有关范围缩小语句的信息，请参阅 [在中使用范围缩小语句 AWS WAF](waf-rule-scope-down-statements.md)。

下表描述了可以添加到规则中的常规匹配语句，并提供计算每个保护包（web ACL）容量单位（WCU）使用量的指南。有关的信息 WCUs，请参见[Web ACL 容量单位 (WCUs) AWS WAF](aws-waf-capacity-units.md)。


| 匹配语句 | 说明 | WCUs | 
| --- | --- | --- | 
| [地理匹配](waf-rule-statement-type-geo-match.md) | 检查请求的来源国，并贴上来源国和地区的标签。 | 1 | 
|  [ASN 匹配](waf-rule-statement-type-asn-match.md)  |  根据与 IP 地址和地址范围相关联的 ASN 检查请求。  |  1  | 
|  [IP 集匹配](waf-rule-statement-type-ipset-match.md)  |  根据一组 IP 地址和地址范围检查请求。  |  大多数情况下为 1。如果您将语句配置为使用带有转发的 IP 地址的标头，并在标头中指定位置Any，则将 WCUs 增大 4。  | 
|  [标签匹配规则语句](waf-rule-statement-type-label-match.md)  |  检查对由同一保护包（web ACL）中其他规则添加的标签的请求。  |  1   | 
| [正则表达式匹配规则语句](waf-rule-statement-type-regex-match.md) | 将正则表达式模式与指定的请求组件进行比较。 | 3，作为基本成本。 如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。  | 
|  [正则表达式模式集](waf-rule-statement-type-regex-pattern-set-match.md)  |  将正则表达式模式与指定的请求组件进行比较。  |  每个模式集 25 个，作为基本成本。 如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。  | 
| [大小约束](waf-rule-statement-type-size-constraint-match.md) | 根据指定的请求组件检查大小限制。 | 1，作为基本成本。 如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。  | 
| [SQLi攻击](waf-rule-statement-type-sqli-match.md) | 检查指定请求组件中是否存在恶意 SQL 代码。 | 20，作为基本成本。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。 | 
| [字符串匹配](waf-rule-statement-type-string-match.md) | 将字符串与指定的请求组件进行比较。 |  基本成本取决于字符串匹配的类型，介于 1 和 10 之间。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。  | 
| [XSS 脚本攻击](waf-rule-statement-type-xss-match.md) | 检查指定请求组件中是否存在跨站脚本攻击。 | 40，作为基本成本。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。 | 

# 地理匹配规则语句
<a name="waf-rule-statement-type-geo-match"></a>

本节介绍了什么是地理匹配语句及其工作方式。

使用地理或地理匹配语句根据来源国家和地区管理 web 请求。地理匹配语句会为 web 请求添加标签，标明来源国和原产地。无论语句条件是否与请求匹配，都会添加这些标签。地理匹配语句还会根据请求的来源国进行匹配。

## 如何使用地理匹配语句
<a name="waf-rule-statement-geo-how-to-use"></a>

您可以使用地理匹配语句进行国家或地区匹配，如下所示：
+ **国家/地区**：您可以单独使用地理匹配规则来管理仅基于其来源国家/地区的请求。规则语句与国家/地区代码相匹配。您也可以使用与来源国标签相匹配的标签匹配规则来遵循地理匹配规则。
**注意**  
要筛选来自香港的流量，请在地理匹配声明中使用 ISO 3166-1 alpha-2 国家/地区 `HK` 代码。
+ **区域**：使用地理匹配规则和标签匹配规则，根据请求的来源区域管理请求。您不能单独使用地理匹配规则来匹配区域代码。

有关使用标签匹配规则的信息，请参阅 [标签匹配规则语句](waf-rule-statement-type-label-match.md) 和 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。

## 地理匹配语句的工作原理
<a name="waf-rule-statement-geo-how-it-works"></a>

使用地理匹配语句，按如下方式 AWS WAF 管理每个 Web 请求：

1. **确定请求的国家和地区代码** — 根据请求的 IP 地址 AWS WAF 确定请求的国家和地区。默认情况下， AWS WAF 使用 Web 请求来源的 IP 地址。您可以指示使用备 AWS WAF 用请求标头中的 IP 地址`X-Forwarded-For`，例如在规则语句设置中启用转发 IP 配置。

   AWS WAF 使用 MaxMind GeoIP 数据库确定请求的位置。 MaxMind 尽管准确性因国家和知识产权类型等因素而异，但它们在国家一级的数据的准确性非常高。有关的更多信息 MaxMind，请参阅 [MaxMind IP 地理定位](https://support.maxmind.com/hc/en-us/sections/4407519834267-IP-Geolocation)。如果您认为任何 GeoIP 数据不正确，可以通过 “更正地理数据” 向 Maxmind 提交更[MaxMind 正](https://support.maxmind.com/hc/en-us/articles/4408252036123-GeoIP-Correction)请求。IP2 

   AWS WAF 使用国际标准化组织 (ISO) 3166 标准中的 alpha-2 国家和地区代码。您可以在以下位置找到代码：
   + 您可以访问 ISO 网站，在 [ISO 在线浏览平台 (OBP)](https://www.iso.org/obp/ui#home) 上搜索国家/地区代码。
   + 在维基百科上，国家/地区代码按照 [ISO 3166-2](https://en.wikipedia.org/wiki/ISO_3166-2) 列出。

     URL `https://en.wikipedia.org/wiki/ISO_3166-2:<ISO country code>` 中列出了某个国家/地区的地区代码。例如，美国的地区代码参见 [ISO 3166-2:US](https://en.wikipedia.org/wiki/ISO_3166-2:US)，乌克兰的地区代码参加 [ISO 3166-2:UA](https://en.wikipedia.org/wiki/ISO_3166-2:UA)。

1. **确定要添加到请求中的国家/地区标签和地区标签**：这些标签表示地理匹配语句使用源 IP 还是转发的 IP 配置。
   + **源 ID** 

     国家标签为 `awswaf:clientip:geo:country:<ISO country code>`。例如，`awswaf:clientip:geo:country:US` 表示美国。

     区域标签为 `awswaf:clientip:geo:region:<ISO country code>-<ISO region code>`。例如，`awswaf:clientip:geo:region:US-OR` 表示美国俄勒冈。
   + **转发的 IP** 

     国家标签为 `awswaf:forwardedip:geo:country:<ISO country code>`。例如，`awswaf:forwardedip:geo:country:US` 表示美国。

     区域标签为 `awswaf:forwardedip:geo:region:<ISO country code>-<ISO region code>`。例如，`awswaf:forwardedip:geo:region:US-OR` 表示美国俄勒冈。

   如果请求的指定 IP 地址没有相应的国家或地区代码，则 AWS WAF 在标签中使用 `XX` 代替该值。例如，以下标签适用于国家/地区代码不可用的客户端 IP：`awswaf:clientip:geo:country:XX` 和以下标签适用于国家/地区为美国但其地区代码不可用的转发 IP：`awswaf:forwardedip:geo:region:US-XX`。

1. **根据规则条件评估请求的国家/地区代码** 

无论是否找到匹配，地理匹配语句都会在其检查的所有请求中添加国家和地区标签，无论是否找到匹配。

**注意**  
AWS WAF 在规则的 Web 请求评估结束时添加所有标签。因此，与地理匹配语句中的标签匹配时，必须在包含地理匹配语句的规则之外的另一条规则中定义。

如果您只想检查区域值，则可以编写带有 Count 操作和单个国家/地区代码匹配的地理匹配规则，后接区域标签的标签匹配规则。即使采用这种方法，您也需要提供国家/地区代码以供地理匹配规则进行评估。您可以通过指定不太可能成为您网站流量来源的国家/地区，来减少日志记录和计数指标。

## CloudFront 分布和 CloudFront 地理限制功能
<a name="cloudfront-distributions-geo-restriction"></a>

对于 CloudFront 分发，如果您使用 CloudFront 地理限制功能，请注意该功能不会将被屏蔽的请求转发到 AWS WAF。它确实会将允许的请求转发到 AWS WAF。如果您想根据地理位置以及可以在中指定的其他条件来阻止请求 AWS WAF，请使用 AWS WAF 地理匹配语句，不要使用 CloudFront 地理限制功能。

## 规则语句特征
<a name="geo-match-statement-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs **— 1 个 WCU。

**设置**：此语句使用以下设置：
+ **国家/地区代码**：用于比较地理匹配的一系列国家/地区代码。这些必须是 ISO 3166 国际标准的 alpha-2 国家/地区 ISO 代码中的双字符国家/地区代码，例如 `["US","CN"]`。
+ **（可选）转发 IP 配置**-默认情况下， AWS WAF 使用 Web 请求来源中的 IP 地址来确定来源国。或者，您可以将规则配置为在 HTTP 标头中使用转发的 IP，如下所`X-Forwarded-For`示。 AWS WAF 使用标头中的第一个 IP 地址。使用此配置，您还可以指定一种回退行为，以应用于标头中包含格式错误的 IP 地址的 web 请求。回退行为将请求的匹配结果设置为匹配或不匹配。有关更多信息，请参阅 [使用转发 IP 地址](waf-rule-statement-forwarded-ip-address.md)。

## 在何处查找规则语句
<a name="geo-match-statement-where-to-find"></a>
+ 控制台上的**规则生成器**：在**请求选项**中，选择**来源国家/地区**。
+ **API**：[GeoMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_GeoMatchStatement.html)

## 示例
<a name="waf-rule-statement-geo-examples"></a>

您可以使用地理匹配语句来管理来自特定国家/地区或区域的请求。例如，如果您想阻止来自某些国家/地区的请求，但仍允许来自这些国家/地区的一组特定 IP 地址的请求，则可以创建一个规则，将操作设置为 Block，并使用以下嵌套语句（以伪代码显示）：
+ AND statement
  + 地理匹配语句，列出您要组织的国家/地区
  + NOT statement 
    + IP 集语句，用于指定要允许通过的 IP 地址

或者，如果您想阻止某些国家/地区的某些区域，但仍允许来自这些国家/地区其他区域的请求，则可以先定义地理匹配规则，并将操作设置为 Count。然后，定义与添加的地理匹配标签匹配的标签匹配规则，并根据需要处理请求。

以下伪代码描述了这种方法的示例：

1. 地理匹配语句列出了一些国家/地区，这些国家/地区有您想要阻止的区域，但操作设置为“计数”。无论匹配状态如何，这都会对每个 web 请求进行标记，还可以为您提供感兴趣的国家/地区的计数指标。

1. 带有阻止操作的 `AND` 语句
   + 标签匹配语句，用于指定要阻止的国家/地区的标签
   + `NOT` statement 
     + 标签匹配语句，用于指定您想要允许通过的国家/地区的区域的标签

以下 JSON 列表显示了前面伪代码中描述的两个规则的实施。这些规则禁止来自美国的所有流量，但来自俄勒冈州和华盛顿州的流量除外。地理匹配语句会为其检查的所有请求添加国家/地区和区域标签。标签匹配规则在地理匹配规则之后运行，因此它可以与地理匹配规则刚刚添加的国家/地区和区域标签进行匹配。地理匹配语句使用转发 IP 地址，因此标签匹配还会指定转发 IP 标签。

```
{
   "Name": "geoMatchForLabels",
   "Priority": 10,
   "Statement": {
     "GeoMatchStatement": {
       "CountryCodes": [
         "US"
       ],
       "ForwardedIPConfig": {
           "HeaderName": "X-Forwarded-For",
           "FallbackBehavior": "MATCH"
       }
     }
   },
   "Action": {
     "Count": {}
   },
   "VisibilityConfig": {
     "SampledRequestsEnabled": true,
     "CloudWatchMetricsEnabled": true,
     "MetricName": "geoMatchForLabels"
   }
},
{
   "Name": "blockUSButNotOROrWA",
   "Priority": 11,
   "Statement": {
     "AndStatement": {
       "Statements": [
         {
           "LabelMatchStatement": {
             "Scope": "LABEL",
             "Key": "awswaf:forwardedip:geo:country:US"
           }
         },
         {
           "NotStatement": {
             "Statement": {
                "OrStatement": {
                  "Statements": [
                    {
                       "LabelMatchStatement": {
                         "Scope": "LABEL",
                         "Key": "awswaf:forwardedip:geo:region:US-OR"
                       }
                    },
                    {
                       "LabelMatchStatement": {
                         "Scope": "LABEL",
                         "Key": "awswaf:forwardedip:geo:region:US-WA"
                       }
                    }
                 ]
               }
             }
           }
         }
       ]
     }
   },
   "Action": {
     "Block": {}
   },
   "VisibilityConfig": {
     "SampledRequestsEnabled": true,
     "CloudWatchMetricsEnabled": true,
     "MetricName": "blockUSButNotOROrWA"
   }
}
```

再举一个例子，您可以将地理匹配与基于速率的规则相结合，为特定国家/地区或区域的用户确定资源的优先级。您可以为每个用于区分用户的地理匹配语句或标签匹配语句创建不同的基于速率的语句。为首选国家/地区中的用户设置较高的速率限制，并为其他用户设置较低的速率限制。

以下 JSON 列表显示了地理匹配规则，后面是基于速率的规则，这些规则限制来自美国的流量。这些规定允许来自俄勒冈州的流量高于来自全国其他任何地方的流量。

```
{
  "Name": "geoMatchForLabels",
  "Priority": 190,
  "Statement": {
    "GeoMatchStatement": {
      "CountryCodes": [
        "US"
      ]
    }
  },
  "Action": {
    "Count": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "geoMatchForLabels"
  }
},
{
  "Name": "rateLimitOregon",
  "Priority": 195,
  "Statement": {
    "RateBasedStatement": {
      "Limit": 3000,
      "AggregateKeyType": "IP",
      "ScopeDownStatement": {
        "LabelMatchStatement": {
          "Scope": "LABEL",
          "Key": "awswaf:clientip:geo:region:US-OR"
        }
      }
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "rateLimitOregon"
  }
},
{
  "Name": "rateLimitUSNotOR",
  "Priority": 200,
  "Statement": {
    "RateBasedStatement": {
      "Limit": 100,
      "AggregateKeyType": "IP",
      "ScopeDownStatement": {
        "AndStatement": {
          "Statements": [
            {
              "LabelMatchStatement": {
                "Scope": "LABEL",
                "Key": "awswaf:clientip:geo:country:US"
              }
            },
            {
              "NotStatement": {
                "Statement": {
                  "LabelMatchStatement": {
                    "Scope": "LABEL",
                    "Key": "awswaf:clientip:geo:region:US-OR"
                  }
                }
              }
            }
          ]
        }
      }
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "rateLimitUSNotOR"
  }
}
```

# IP 集匹配规则语句
<a name="waf-rule-statement-type-ipset-match"></a>

本节介绍了什么是 IP 集匹配语句及其工作方式。

IP 集匹配语句根据一组 IP 地址和地址范围检查 web 请求的 IP 地址。使用此选项可根据请求源自的 IP 地址允许或阻止 web 请求。默认情况下， AWS WAF 使用来自 web 请求来源的 IP 地址，但您可以将规则配置为使用类似 `X-Forwarded-For` 的 HTTP 标头。



AWS WAF 支持除之外的所有 IPv4 和 IPv6 CIDR 范围。`/0`有关 CIDR 表示法的更多信息，请参阅维基百科条目[无类别域间路由](https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing)。一个 IP 集最多可以容纳 1 万个 IP 地址或 IP 地址范围以供检查。

**注意**  
每个 IP 集匹配规则引用一个 IP 集，该集的创建和维护独立于规则。您可以在多个规则中使用单个 IP 集，并且在更新引用的集合时， AWS WAF 会自动更新引用该集合的所有规则。  
有关创建和管理 IP 集的信息，请参阅 [创建和管理中设置的 IP AWS WAF](waf-ip-set-managing.md)。

在规则组或保护包（web ACL）中添加或更新规则时，选择 **IP 集**选项，然后选择要使用的 IP 集的名称。

## 规则语句特征
<a name="ipset-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 大多数 1 个 WCU。如果将语句配置为使用转发 IP 地址并指定 ANY 的位置，则 WCU 使用量将增加 4。

此语句使用以下设置：
+ **IP 集规范**：从列表中选择要使用的 IP 集或创建一个新的 IP 集。
+ **（可选）转发 IP 配置**：用于代替请求来源的备用转发 IP 标头名称。您可以指定是与标头中的第一个地址、最后一个地址还是任何地址进行匹配。您还可以指定一种回退行为，以应用于指定标头中包含格式错误的 IP 地址的 web 请求。回退行为将请求的匹配结果设置为匹配或不匹配。有关更多信息，请参阅 [使用转发 IP 地址](waf-rule-statement-forwarded-ip-address.md)。

## 在何处查找规则语句
<a name="ipset-match-where-to-find"></a>

**在何处查找规则语句**
+ 控制台上的**规则生成器**：在**请求选项**中，选择**来源 IP 地址**。
+ 在控制台上@@ **添加我自己的规则和规则组**页面：选择 **IP 设置**选项。
+ **API**：[IPSetReferenceStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_IPSetReferenceStatement.html)

# 自治系统编号（ASN）匹配规则语句
<a name="waf-rule-statement-type-asn-match"></a>

中的 ASN 匹配规则语句 AWS WAF 允许您根据与请求的 IP 地址关联的自治系统编号 (ASN) 来检查 Web 流量。 ASNs 是分配给互联网服务提供商、企业、大学或政府机构等组织管理的大型互联网网络的唯一标识符。通过使用 ASN 匹配语句，可以允许或阻止特定网络组织的流量，而无需管理单个 IP 地址。与基于 IP 的规则相比，这种方法提供了一种更稳定、更有效的访问控制方式，因为ASNs 更改频率低于 IP 范围。

对于阻止来自已知问题网络的流量，或仅允许来自可信合作伙伴网络的访问等场景，ASN 匹配格外有用。ASN match 语句提供了通过可选的转发 IP 配置来确定客户端 IP 地址的灵活性，使其与各种网络设置兼容，包括使用内容交付网络 (CDNs) 或反向代理的网络设置。

**注意**  
ASN 匹配是对标准身份验证和授权控制的补充，但不会取代标准身份验证和授权控制。我们建议您实施 IAM 等身份验证和授权机制，以验证应用程序中所有请求的身份。

## ASN 匹配语句的工作原理
<a name="waf-rule-statement-type-asn-match-how-it-works"></a>

AWS WAF 根据请求的 IP 地址确定请求的 ASN。默认情况下， AWS WAF 使用 Web 请求来源的 IP 地址。您可以配置 AWS WAF 为使用备用请求标头中的 IP 地址`X-Forwarded-For`，例如在规则语句设置中启用转发 IP 配置。

ASN 匹配语句将请求的 ASN 与规则中 ASNs 指定的列表进行比较。如果 ASN 与列表中的一个 ASN 匹配，则该语句的计算结果为 true，且应用相关联的规则操作。

### 处理未映射的 ASNs
<a name="waf-rule-statement-type-asn-match-unmapped"></a>

如果 AWS WAF 无法确定有效 IP 地址的 ASN，它会分配 ASN 0。您可以在规则中包含 ASN 0，以明确处理这些情况。

### 无效 IP 地址的回退行为
<a name="waf-rule-statement-type-asn-match-fallback"></a>

当配置 ASN 匹配语句以使用转发的 IP 地址时，可以对指定标头中包含无效或缺少 IP 地址的请求指定《匹配》**或《不匹配》**的回退行为。

## 规则语句特征
<a name="waf-rule-statement-type-asn-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 1 个 WCU

此语句使用以下设置：
+ **ASN 列表**：用于比较 ASN 匹配的 ASN 编号组。有效值的范围从 0 到 4294967295。您最多可以 ASNs 为每条规则指定 100。
+ **（可选）转发 IP 配置**-默认情况下， AWS WAF 使用 Web 请求源中的 IP 地址来确定 ASN。或者，您可以将规则配置为在 HTTP 标头中使用转发 IP，如 `X-Forwarded-For`。您可以指定是使用标头中的第一个地址、最后一个地址还是任何地址。使用此配置，您还可以指定一种回退行为，以应用于标头中包含格式错误的 IP 地址的 web 请求。回退行为将请求的匹配结果设置为匹配或不匹配。有关更多信息，请参阅[使用转发的 IP 地址](https://docs.aws.amazon.com/waf/latest/developerguide/waf-rule-statement-forwarded-ip-address.html)。

## 在何处查找规则语句
<a name="waf-rule-statement-type-asn-match-where-to-find"></a>
+ 控制台上的**规则生成器**：在**请求选项**中，选择**来源 ASN**。
+ **API**：[AsnMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_AsnMatchStatement.html)

## 示例
<a name="waf-rule-statement-type-asn-match-examples"></a>

此示例阻止了源自两个特定 ASNs `X-Forwarded-For`标头的请求。如果标头中的 IP 地址格式不正确，则配置的回退行为是 `NO_MATCH` 。

```
{
  "Action": {
    "Block": {}
  },
  "Name": "AsnMatchStatementRule",
  "Priority": 1,
  "Statement": {
    "AsnMatchStatement": {
      "AsnList": [64496, 64500]
    },
    "ForwardedIPConfig": {
      "FallbackBehavior": "NO_MATCH",
      "HeaderName": "X-Forwarded-For"
    }
  },
  "VisibilityConfig": {
    "CloudWatchMetricsEnabled": true,
    "MetricName": "AsnMatchRuleMetrics",
    "SampledRequestsEnabled": true
  }
},
"VisibilityConfig": {
  "CloudWatchMetricsEnabled": true,
  "MetricName": "WebAclMetrics",
  "SampledRequestsEnabled": true
}
}
```

# 标签匹配规则语句
<a name="waf-rule-statement-type-label-match"></a>

本节介绍了什么是标签匹配语句及其工作方式。

标签匹配语句根据字符串规范检查 web 请求中的标签。可用于检查规则的标签是指在同一保护包（web ACL）评估中已由其他规则添加到 web 请求中的标签。

标签不会在保护包 (Web ACL) 评估之外保留，但您可以在中访问标签指标， CloudWatch 并且可以在 AWS WAF 控制台中查看任何保护包 (Web ACL) 的标签信息摘要。有关更多信息，请参阅[标签指标和维度](waf-metrics.md#waf-metrics-label)和[监控和调整您的 AWS WAF 保护措施](web-acl-testing-activities.md)。您还可看到日志中的标签。有关信息，请参阅[保护包（web ACL）流量的日志字段](logging-fields.md)。

**注意**  
标签匹配语句只能查看之前在保护包（web ACL）中评估过的规则中的标签。有关如何 AWS WAF 评估保护包 (Web ACL) 中的规则和规则组的信息，请参阅[设置规则优先级](web-acl-processing-order.md)。

有关添加和匹配标签的信息，请参阅 [在 Web 请求中添加标签 AWS WAF](waf-labels.md)。

## 规则语句特征
<a name="label-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 1 个 WCU

此语句使用以下设置：
+ **匹配范围**：将其设置为 **标签** 以匹配标签名称以及前面的命名空间和前缀（可选）。将其设置为**命名空间**以匹配部分或全部命名空间规范，也可以匹配前面的前缀。
+ **Key**：要与之匹配的字符串。如果指定命名空间匹配范围，则应仅指定命名空间和前缀（可选），并带有结尾冒号。如果指定标签匹配范围，则必须包括标签名称，并且可以选择包括前述命名空间和前缀。

有关这些设置的信息，请参阅[AWS WAF 与标签匹配的规则](waf-rule-label-match.md)和[AWS WAF 标签匹配示例](waf-rule-label-match-examples.md)。

## 在何处查找规则语句
<a name="label-match-where-to-find"></a>
+ 控制台上**规则生成器**：对于**请求选项**，选择**有标签**。
+ **API**：[LabelMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_LabelMatchStatement.html)

# 正则表达式匹配规则语句
<a name="waf-rule-statement-type-regex-match"></a>

本节介绍了什么是正则表达式匹配语句及其工作方式。

正则表达式匹配语句指示 AWS WAF 将请求组件与单个正则表达式 (regex) 进行匹配。如果请求组件与您指定的正则表达式匹配，则 Web 请求与语句匹配。

对于想要使用数学逻辑组合匹配条件的情况，此语句类型是 [正则表达式模式集匹配规则语句](waf-rule-statement-type-regex-pattern-set-match.md) 一个不错的替代方案。例如，如果您希望请求组件与某些正则表达式模式匹配而不匹配其他正则表达式模式，则可以使用 [AND 规则语句](waf-rule-statement-type-and.md) 和 [NOT 规则语句](waf-rule-statement-type-not.md) 来组合正则表达式匹配语句。

AWS WAF 支持 PCRE 库使用的模式语法，但`libpcre`有一些例外。该库记录在 [PCRE：与 Perl 兼容的正则表达式](http://www.pcre.org/)中。有关 AWS WAF 支持的信息，请参阅[中支持的正则表达式语法 AWS WAF](waf-regex-pattern-support.md)。

## 规则语句特征
<a name="regex-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 3 WCUs，作为基本成本。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件**：web 请求中要检查的部分，例如查询字符串或正文。
**警告**  
如果您检查请求组件 B **ody**、**JSON 正**文、**Header** **s 或 Cookie**，请阅读有关内容 AWS WAF 可检查数量的限制[中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

  有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。
+ **可选的文本转换**-在检查请求组件之前 AWS WAF 要对其执行的转换。例如，您可以将空格转换为小写或标准化空格。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理这些转换。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

## 在何处查找规则语句
<a name="regex-match-where-to-find"></a>
+ 控制台上**规则生成器** – 对于**匹配类型**，选择**匹配正则表达式**。
+ **API**：[RegexMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_RegexMatchStatement.html)

# 正则表达式模式集匹配规则语句
<a name="waf-rule-statement-type-regex-pattern-set-match"></a>

本节介绍了什么是正则表达式模式集匹配语句及其工作方式。

正则表达式模式集匹配检查您指定的 Web 请求部分中是否存在您在正则表达式模式集中指定的正则表达式模式。

AWS WAF 支持 PCRE 库使用的模式语法，但`libpcre`有一些例外。该库记录在 [PCRE：与 Perl 兼容的正则表达式](http://www.pcre.org/)中。有关 AWS WAF 支持的信息，请参阅[中支持的正则表达式语法 AWS WAF](waf-regex-pattern-support.md)。

**注意**  
每个正则表达式模式集匹配规则引用一个正则表达式模式集，该集的创建和维护独立于规则。你可以在多个规则中使用单个正则表达式模式集，当你更新被引用的集合时， AWS WAF 会自动更新所有引用它的规则。  
有关创建和管理正则表达式模式集的信息，请参阅 [创建和管理中设置的正则表达式模式 AWS WAF](waf-regex-pattern-set-managing.md)。

正则表达式模式集匹配语句指示 AWS WAF 在您选择的请求组件中搜索集合中的任何模式。如果请求组件与集合中的任何模式匹配，Web 请求将匹配模式集规则语句。

如果要使用逻辑组合正则表达式模式匹配，例如与某些正则表达式进行匹配而不匹配其他正则表达式，请考虑使用 [正则表达式匹配规则语句](waf-rule-statement-type-regex-match.md)。

## 规则语句特征
<a name="regex-pattern-set-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 25 WCUs，作为基本成本。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件**：web 请求中要检查的部分，例如查询字符串或正文。
**警告**  
如果您检查请求组件 B **ody**、**JSON 正**文、**Header** **s 或 Cookie**，请阅读有关内容 AWS WAF 可检查数量的限制[中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

  有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。
+ **可选的文本转换**-在检查请求组件之前 AWS WAF 要对其执行的转换。例如，您可以将空格转换为小写或标准化空格。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理它们。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

此语句需要以下设置：
+ 正则表达式模式集规范 – 从列表中选择要使用的正则表达式模式集或创建一个新的正则表达式模式集。

## 在何处查找规则语句
<a name="regex-pattern-set-match-where-to-find"></a>
+ 控制台上的**规则生成器** – 对于**匹配类型**，选择**字符串匹配条件** > **从正则表达式集中匹配模式**。
+ **API**：[RegexPatternSetReferenceStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_RegexPatternSetReferenceStatement.html)

# 大小约束规则语句
<a name="waf-rule-statement-type-size-constraint-match"></a>

本节介绍了什么是大小限制语句及其工作方式。

大小约束语句将 Web 请求组件 AWS WAF 收到的字节数与您提供的数字进行比较，并根据您的比较标准进行匹配。

比较条件是一个运算符，例如大于 (>) 或小于 (<)。例如，您可以匹配具有大于 100 字节的查询字符串的请求。

如果您检查 URI 路径，则路径中的任何 `/` 都算作一个字符。例如，URI 路径 `/logo.jpg` 的长度是 9 个字符。

**注意**  
此语句仅检查 Web 请求组件的大小。不检查组件的内容。

## 规则语句特征
<a name="size-constraint-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 1 WCU，作为基本成本。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件** – Web 请求中要检查的部分，例如查询字符串或正文。有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。

  在应用了任何转换后，大小约束语句仅检查组件的大小。不检查组件的内容。
+ **可选的文本转换**-在检查请求组件的大小之前 AWS WAF 要对其执行的转换。例如，您可以压缩空白或对 HTML 实体进行解码。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理这些转换。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

此外，此语句需要以下设置：
+ **大小匹配条件** – 这表示用于将您提供的大小与所选请求组件进行比较的数字比较运算符。从列表中选择运算符。
+ **大小** – 比较中使用的大小设置（以字节为单位）。

## 在何处查找规则语句
<a name="size-constraint-match-where-to-find"></a>
+ 控制台上的**规则生成器** – 对于**匹配类型**，在**大小匹配条件**下选择要使用的条件。
+ **API**：[SizeConstraintStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_SizeConstraintStatement.html)

# SQL 注入攻击规则语句
<a name="waf-rule-statement-type-sqli-match"></a>

本节介绍了什么是 SQL 注入规则语句及其工作方式。

检查恶意 SQL 代码的 SQL 注入规则语句。攻击者将恶意 SQL 代码插入到 web 请求中，以执行修改数据库或从中提取数据等操作。

## 规则语句特征
<a name="sqli-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 基本成本取决于规则语句的灵敏度级别设置：Low成本 20，High成本 30。

如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件**：web 请求中要检查的部分，例如查询字符串或正文。
**警告**  
如果您检查请求组件 B **ody**、**JSON 正**文、**Header** **s 或 Cookie**，请阅读有关内容 AWS WAF 可检查数量的限制[中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

  有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。
+ **可选的文本转换**-在检查请求组件之前 AWS WAF 要对其执行的转换。例如，您可以将空格转换为小写或标准化空格。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理这些转换。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

此外，此语句需要以下设置：
+ **敏感度级别**：此设置可调整 SQL 注入匹配条件的敏感度。选项为 LOW 和 HIGH。默认设置为 LOW。

  HIGH 设置可检测更多 SQL 注入攻击，是一项推荐设置。由于灵敏度更高，此设置会生成更多的误报，尤其是在您的 web 请求通常包含异常字符串的情况下。在保护包（web ACL）测试和调整期间，您可能需要实施更多工作以减少误报。有关信息，请参阅[测试和调整您的 AWS WAF 保护措施](web-acl-testing.md)。

  设置越低，SQL 注入检测越不严格，误报也就越少。对于具有针对 SQL 注入攻击的其他保护或对误报具有低容忍度的资源，LOW 可能是一个更好的选择。

## 在何处查找规则语句
<a name="sqli-match-where-to-find"></a>
+ 控制台上的**规则生成器**：对于**匹配类型**，请选择**攻击匹配条件** > **包含 SQL 注入攻击**。
+ **API**：[SqliMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_SqliMatchStatement.html)

# 字符串匹配规则语句
<a name="waf-rule-statement-type-string-match"></a>

本节介绍了什么是字符串匹配语句及其工作方式。

字符串匹配语句表示您 AWS WAF 要在请求中搜索的字符串、在请求中的位置以及搜索方式。例如，您可以在请求中查找任何查询字符串开头的特定字符串，也可以查找请求 `User-agent` 标头的精确匹配项。字符串通常由可打印 ASCII 字符组成，但您可以使用从十六进制 0x00 到 0xFF (十进制 0 到 255) 的任何字符。

## 规则语句特征
<a name="string-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 基本费用取决于您使用的匹配类型。
+ **完全匹配字符串** – 2 
+ **以字符串开头** – 2 
+ **以字符串结尾** – 2 
+ **包含字符串** – 10 
+ **包含单词** – 10 

如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件**：web 请求中要检查的部分，例如查询字符串或正文。
**警告**  
如果您检查请求组件 B **ody**、**JSON 正**文、**Header** **s 或 Cookie**，请阅读有关内容 AWS WAF 可检查数量的限制[中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

  有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。
+ **可选的文本转换**-在检查请求组件之前 AWS WAF 要对其执行的转换。例如，您可以将空格转换为小写或标准化空格。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理它们。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

此外，此语句需要以下设置：
+ **要匹配的字符**串 — 这是您 AWS WAF 要与指定请求组件进行比较的字符串。字符串通常由可打印 ASCII 字符组成，但您可以使用从十六进制 0x00 到 0xFF (十进制 0 到 255) 的任何字符。
+ **字符串匹配条件**-这表示您 AWS WAF 要执行的搜索类型。
  + **完全匹配字符串** – 字符串和请求组件的值相同。
  + **以字符串开头** – 字符串出现在请求组件的开头。
  + **以字符串结尾** – 字符串出现在请求组件的末尾。
  + **包含字符串** – 该字符串出现在请求组件中的任何位置。
  + **包含词** – 您指定的字符串必须显示在请求组件中。

    对于此选项，指定的字符串必须仅包含字母数字字符或下划线（A-Z、a-z、0-9 或 \$1）。

    请求必须满足以下条件之一：
    + 字符串与请求组件的值精确匹配，如标头的值。
    + 字符串位于请求组件的开头，并且后跟字母数字字符或下划线 (\$1) 之外的字符（例如，`BadBot;`）。
    + 字符串位于请求组件的末尾，并且前面是字母数字字符或下划线 (\$1) 之外的字符，例如，`;BadBot`。
    + 字符串位于请求组件的中间，并且前面和后面是字母数字字符或下划线 (\$1) 之外的字符，例如，`-BadBot;`。

## 在何处查找规则语句
<a name="string-match-where-to-find"></a>
+ 控制台上的**规则生成器** – 对于**匹配类型**，请选择**字符串匹配条件**，然后填写匹配所依据的字符串。
+ **API**：[ByteMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_ByteMatchStatement.html)

# 跨站点脚本攻击规则语句
<a name="waf-rule-statement-type-xss-match"></a>

本节介绍了什么是 XSS（跨站点脚本）攻击语句及其工作方式。

XSS攻击语句会检查 Web 请求组件中是否存在恶意脚本。在 XSS 攻击中，攻击者将良性网站中的漏洞作为载体，以将恶意客户端站点脚本，注入到其它合法 Web 浏览器中。

## 规则语句特征
<a name="xss-match-characteristics"></a>

**嵌套**：您可以嵌套此语句类型。

**WCUs**— 40 WCUs，作为基本成本。如果您使用请求组件 **All 查询参数**，请添加 10 WCUs。如果您使用请求组件 **JSON 正文**，则将基本成本增加一倍 WCUs。对于您应用的每个**文本转换**，请添加 10 WCUs。

此语句类型在 web 请求组件上运行，需要以下请求组件设置：
+ **请求组件**：web 请求中要检查的部分，例如查询字符串或正文。
**警告**  
如果您检查请求组件 B **ody**、**JSON 正**文、**Header** **s 或 Cookie**，请阅读有关内容 AWS WAF 可检查数量的限制[中的 Web 请求组件过大 AWS WAF](waf-oversize-request-components.md)。

  有关请求组件的更多信息，请参阅 [在中调整规则语句设置 AWS WAF](waf-rule-statement-fields.md)。
+ **可选的文本转换**-在检查请求组件之前 AWS WAF 要对其执行的转换。例如，您可以将空格转换为小写或标准化空格。如果您指定了多个转换，则按列出的顺序 AWS WAF 处理它们。有关信息，请参阅[在中使用文本转换 AWS WAF](waf-rule-statement-transformation.md)。

## 在何处查找规则语句
<a name="xss-match-where-to-find"></a>
+ 控制台上的**规则生成器** – 对于**匹配类型**，请选择**攻击匹配条件** > **包含 XSS 注入攻击**。
+ **API**：[XssMatchStatement](https://docs.aws.amazon.com/waf/latest/APIReference/API_XssMatchStatement.html)