

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

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

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

# AND 规则语句
<a name="waf-rule-statement-type-and"></a>

AND 规则语句将嵌套语句与逻辑 AND 运算相结合，因此所有嵌套语句都必须匹配 AND 语句才能进行匹配。这至少需要两个嵌套语句。

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

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

**WCUs**— 取决于嵌套语句。

## 在何处查找规则语句
<a name="and-rule-statement-where-to-find"></a>
+ 控制台上的**规则生成器** – 对于**如果有请求**，选择**匹配所有语句 (AND)**，然后填写嵌套语句。
+ **API**：[AndStatement](https://docs.amazonaws.cn/waf/latest/APIReference/API_AndStatement.html)

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

以下列表显示了如何使用 AND 和 NOT 逻辑规则语句来消除 SQL 注入攻击语句的匹配结果误报。在这个示例中，假设我们可以编写一个单字节匹配语句来匹配导致误报的请求。

AND 语句匹配与字节匹配语句不匹配且与 SQL 注入攻击语句匹配的请求。

```
{
      "Name": "SQLiExcludeFalsePositives",
      "Priority": 0,
      "Statement": {
        "AndStatement": {
          "Statements": [
            {
              "NotStatement": {
                "Statement": {
                  "ByteMatchStatement": {
                    "SearchString": "string identifying a false positive",
                    "FieldToMatch": {
                      "Body": {
                        "OversizeHandling": "MATCH"
                      }
                    },
                    "TextTransformations": [
                      {
                        "Priority": 0,
                        "Type": "NONE"
                      }
                    ],
                    "PositionalConstraint": "CONTAINS"
                  }
                }
              }
            },
            {
              "SqliMatchStatement": {
                "FieldToMatch": {
                  "Body": {
                    "OversizeHandling": "MATCH"
                  }
                },
                "TextTransformations": [
                  {
                    "Priority": 0,
                    "Type": "NONE"
                  }
                ]
              }
            }
          ]
        }
      },
      "Action": {
        "Block": {}
      },
      "VisibilityConfig": {
        "SampledRequestsEnabled": true,
        "CloudWatchMetricsEnabled": true,
        "MetricName": "SQLiExcludeFalsePositives"
      }
    }
```

使用控制台规则可视化编辑器，可以在 OR 或 AND 语句下嵌套非逻辑语句或 NOT 语句。前面的示例显示了 NOT 语句的嵌套。

使用控制台规则可视化编辑器，您可以将大多数可嵌套语句嵌套在逻辑规则语句下，例如前面的示例中所示的语句。您不能使用可视化编辑器来嵌套 OR 或 AND 语句。要配置这种类型的嵌套，您需要以 JSON 格式提供规则语句。例如，以下 JSON 规则列表包括嵌套在 AND 语句中的 OR 语句。

```
{
  "Name": "match_rule",
  "Priority": 0,
  "Statement": {
    "AndStatement": {
      "Statements": [
        {
          "LabelMatchStatement": {
            "Scope": "LABEL",
            "Key": "awswaf:managed:aws:bot-control:bot:category:monitoring"
          }
        },
        {
          "NotStatement": {
            "Statement": {
              "LabelMatchStatement": {
                "Scope": "LABEL",
                "Key": "awswaf:managed:aws:bot-control:bot:name:pingdom"
              }
            }
          }
        },
        {
          "OrStatement": {
            "Statements": [
              {
                "GeoMatchStatement": {
                  "CountryCodes": [
                    "JM",
                    "JP"
                  ]
                }
              },
              {
                "ByteMatchStatement": {
                  "SearchString": "JCountryString",
                  "FieldToMatch": {
                    "Body": {}
                  },
                  "TextTransformations": [
                    {
                      "Priority": 0,
                      "Type": "NONE"
                    }
                  ],
                  "PositionalConstraint": "CONTAINS"
                }
              }
            ]
          }
        }
      ]
    }
  },
  "Action": {
    "Block": {}
  },
  "VisibilityConfig": {
    "SampledRequestsEnabled": true,
    "CloudWatchMetricsEnabled": true,
    "MetricName": "match_rule"
  }
}
```