

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

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

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

# 使用字符串匹配条件
<a name="classic-web-acl-string-conditions"></a>

**警告**  
Amazon WAF Classic 正在按计划 end-of-life进行。有关您所在地区的里程碑和日期，请参阅您的 Amazon Health 控制面板。

**注意**  
这是 **Amazon WAF Classic** 文档。只有在 2019 年 11 月 Amazon WAF 之前创建了诸如规则和 Web ACLs 之类的 Amazon WAF 资源，并且尚未将其迁移到最新版本时，才应使用此版本。要迁移您的网站 ACLs，请参阅[将您的 Amazon WAF 经典资源迁移到 Amazon WAF](waf-migrating-from-classic.md)。  
**有关的最新版本 Amazon WAF，**请参阅[Amazon WAF](waf-chapter.md)。

如果要基于出现在请求中的字符串允许或阻止 web 请求，请创建一个或多个字符串匹配条件。字符串匹配条件用于标识您要搜索的字符串以及您希望 C Amazon WAF lassic 检查该字符串的 Web 请求部分，例如指定的标头或查询字符串。在这个过程中的稍后阶段，在创建 web ACL 时，需要指定是允许还是阻止包含该字符串的请求。

**Topics**
+ [创建字符串匹配条件](#classic-web-acl-string-conditions-creating)
+ [创建或编辑字符串匹配条件时指定的值](#classic-web-acl-string-conditions-values)
+ [在字符串匹配条件中添加和删除筛选条件](#classic-web-acl-string-conditions-editing)
+ [删除字符串匹配条件](#classic-web-acl-string-conditions-deleting)

## 创建字符串匹配条件
<a name="classic-web-acl-string-conditions-creating"></a>

创建字符串匹配条件时，需要指定筛选器来识别要搜索的字符串以及希望 C Amazon WAF lassic 检查该字符串的 Web 请求部分，例如 URI 或查询字符串。您可以将多个筛选条件添加到字符串匹配条件，也可以为每个筛选条件创建单独的字符串匹配条件。以下是每种配置如何影响 Amazon WAF 经典行为：
+ **每个字符串匹配条件一个过滤器**-将单独的字符串匹配条件添加到规则并将该规则添加到 Web ACL 时，Web 请求必须匹配所有条件，Cl Amazon WAF assic 才能根据条件允许或阻止请求。

  例如，假设您创建两个条件。一个条件与 `BadBot` 标头中包含值 `User-Agent` 的 web 请求匹配。另一个条件与查询字符串中包含值 `BadParameter` 的 web 请求匹配。当您将两个条件添加到同一个规则并将该规则添加到 Web ACL 时，Cl Amazon WAF assic 仅允许或阻止包含两个值的请求。
+ **每个字符串匹配条件不止一个过滤器**-当您将包含多个过滤器的字符串匹配条件添加到规则并将该规则添加到 Web ACL 时，Web 请求只需要匹配字符串匹配条件中的一个过滤器，Cl Amazon WAF assic 即可根据一个条件允许或阻止请求。

  假设您创建了一个而不是两个条件，并且其中一个条件包含与前面示例相同的两个筛选条件。 Amazon WAF *如果请求包含在`User-Agent`标题或查询字符串`BadBot`中，Classic 将允许*或*`BadParameter`阻止请求。*

**注意**  
向规则添加字符串匹配条件时，还可以将 Cl Amazon WAF assic 配置为允许或阻止与条件中的值*不*匹配的 Web 请求。<a name="classic-web-acl-string-conditions-creating-procedure"></a>

**创建字符串匹配条件**

1. 登录 Amazon Web Services 管理控制台 并打开 Amazon WAF 控制台，网址为[https://console.aws.amazon.com/wafv2/](https://console.amazonaws.cn/wafv2/)。

   如果您在导航窗格中看到 “**切换到 Amazon WAF 经典版**”，请将其选中。

1. 在导航窗格中，选择**字符串和正则表达式匹配**。

1. 选择 **创建条件**。

1. 指定适用的筛选条件设置。有关更多信息，请参阅 [创建或编辑字符串匹配条件时指定的值](#classic-web-acl-string-conditions-values)。

1. 选择 **添加筛选条件**。

1. 如果要添加其他筛选条件，请重复步骤 4 和 5。

1. 添加完筛选器后，选择 **创建**。

## 创建或编辑字符串匹配条件时指定的值
<a name="classic-web-acl-string-conditions-values"></a>

创建或更新字符串匹配条件时，需要指定以下值：

**Name**  
为字符串匹配条件输入名称。该名称只能包含字母数字字符（A-Z、a-z、0-9）或以下特殊字符：\$1-\$1"\$1`\$1\$1\$1,./。条件的名称在创建后不可更改。

**Type**  
选择**字符串匹配**。

**Part of the request to filter on**  
选择每个 Web 请求中您希望 Amazon WAF Classic 检查的部分，以查找您在**要匹配的值**中指定的字符串：    
**标题**  
指定的请求标头，例如 `User-Agent` 或 `Referer` 标头。如果选择 **Header**，则在 **Header** 字段中指定标头的名称。  
**HTTP method**  
HTTP 方法，指示请求要求源执行的操作的类型。CloudFront 支持以下方法：`DELETE`、`GET`、`HEAD`、`OPTIONS`、`PATCH`、`POST` 和 `PUT`。  
**查询字符串**  
URL 中在 `?` 字符之后出现的部分 (如果有)。  
**URI**  
请求的 URI 路径，用于标识资源，例如 `/images/daily-ad.jpg`。这不包括 URI 的查询字符串或片段组件。有关信息，请参阅[统一资源标识符 (URI)：一般语法](https://tools.ietf.org/html/rfc3986#section-3.3)。  
除非指定了**转换**，否则不会对 URI 进行标准化，而是像在请求中从客户端 Amazon 收到的那样对其进行检查。**转换** 将按指定方式重新设置 URI 的格式。  
**Body**  
请求中包含要作为 HTTP 请求正文发送到 web 服务器的任何附加数据（如表单数据）的部分。  
如果选择**正文**作为**要作为筛选条件的请求部分** 的值，则 Amazon WAF Classic 只检查前 8192 个字节 (8 KB)。要允许或阻止正文长度超过 8192 个字节的请求，可以创建大小约束条件。（Amazon WAF Classic 从请求标头中获取正文的长度。） 有关更多信息，请参阅 [使用大小约束条件](classic-web-acl-size-conditions.md)。  
**单一查询参数（仅限值）**  
您已定义为查询字符串的一部分的任何参数。例如，如果网址是 “www.xyz.com？UserName=abc& SalesRegion =seattle”，则可以向或参数添加过滤器。*UserName*SalesRegion**  
如果查询字符串中出现重复的参数，求出的值将为“OR”。也就是说，任一个值都将触发匹配。例如，在 URL “www.xyz.com？SalesRegion=boston& SalesRegion =seattle” 中，“要匹配的**值**” 中的 “波士顿” 或 “西雅图” 都将触发匹配。  
如果您选择 **单一查询参数（仅限值）**，您还将指定 **查询参数名称**。这是您要检查的查询字符串中的参数，例如*UserName*或*SalesRegion*。**查询参数名称** 的最大长度为 30 个字符。**查询参数名称** 不区分大小写。例如，如果您指定*UserName*为**查询参数名称**，它将匹配的所有变体 *UserName*，例如*用户名*和*我们ERName*。  
**所有查询参数（仅限值）**  
与**单一查询参数（仅限值）**类似，但C Amazon WAF lassic不会检查单个参数的值，而是检查查询字符串中所有参数的**值以匹配该值**。**例如，如果网址为 “www.xyz.com？UserName=abc& SalesRegion =seattle”，并且您选择了**所有查询参数（仅限值）**，则如果将*UserName*或的值指定为要匹配的值，C Amazon WAF lass *SalesRegion*ic 将触发匹配。**

**Header (仅当“Part of the request to filter on”是“Header”时)**  
如果您从**请求的部分中选择**标题**以在列表中进行筛选**，请从常用标题列表中选择标题，或者输入希望 C Amazon WAF lassic 检查的标题的名称。

**匹配类型**  
在您希望 Amazon WAF Classic 检查的请求部分中，选择要**匹配的值**中的字符串必须出现在哪个位置才能匹配此过滤器：    
**包含**  
字符串在请求的指定部分中的任何位置出现。  
**包含单词**  
web 请求的指定部分必须包含**要匹配的值**，并且**要匹配的值**必须仅包含字母数字字符或下划线 (A-Z、a-z、0-9 或 \$1)。此外，**要匹配的值**必须是单词，这表示以下一种情况：  
+ **要匹配的值**与 web 请求的指定部分的值精确匹配，如标头的值。
+ **要匹配的值**处于 web 请求的指定部分的开头，并且后跟字母数字字符或下划线（\$1）之外的字符（例如，`BadBot;`）。
+ **要匹配的值**处于 web 请求的指定部分的末尾，并且前面是字母数字字符或下划线（\$1）之外的字符（例如，`;BadBot`）。
+ **要匹配的值**处于 web 请求的指定部分的中间，并且前面和后面是字母数字字符或下划线（\$1）之外的字符（例如，`-BadBot;`）。  
**完全匹配**  
字符串和请求的指定部分的值是相同的。  
**开头为**  
字符串出现在请求的指定部分的开头。  
**结尾为**  
字符串出现在请求的指定部分的末尾。

**转换**  
在 C Amazon WAF lassic 检查请求之前，转换会重新格式化 Web 请求。这消除了攻击者为了绕过 C Amazon WAF lassic 而在 Web 请求中使用的一些不寻常的格式。  
您只能指定一个类型的文本转换。  
转换可以执行以下操作：    
**无**  
Amazon WAF 在检查 **Valu** e 中的字符串是否匹配之前，Classic 不会对 Web 请求执行任何文本转换。  
**转换为小写形式**  
Amazon WAF 经典版将大写字母 (A-Z) 转换为小写字母 (a-z)。  
**HTML decode**  
Amazon WAF Classic 用未编码的字符替换 HTML 编码的字符：  
+ 将 `&quot;` 替换为 `&`
+ 将 `&nbsp;` 替换为不间断空格
+ 将 `&lt;` 替换为 `<`
+ 将 `&gt;` 替换为 `>`
+ 将以十六进制格式表示的字符 `&#xhhhh;` 替换为对应字符
+ 将以十进制格式表示的字符 `&#nnnn;` 替换为对应字符  
**规范化空格**  
Amazon WAF Classic 将以下字符替换为空格字符（十进制 32）：  
+ \$1f，换页符，十进制 12
+ \$1t，制表符，十进制 9
+ \$1n，换行符，十进制 10
+ \$1r，回车符，十进制 13
+ \$1v，垂直制表符，十进制 11
+ 不间断空格，十进制 160
此外，此选项将多个空格替换为一个空格。  
**Simplify command line**  
如果您担心攻击者注入操作系统命令行命令并使用异常格式伪装部分或所有命令，使用此选项可执行以下转换：  
+ 删除以下字符：\$1 " ' ^
+ 删除以下字符之前的空格：/ (
+ 将以下字符替换为空格：, ;
+ 将多个空格替换为一个空格
+ 将大写字母 (A-Z) 转换为小写字母 (a-z)  
**URL 解码**  
解码 URL 编码的请求。

**值采用 base64 编码**  
如果**要匹配的值**中的值进行了 base64 编码，则选中此复选框。使用 base64 编码可指定攻击者在其请求中包含的不可打印的字符（如制表符和换行符）。

**要匹配的值**  
指定您希望 Amazon WAF Classic 在 Web 请求中搜索的值。最大长度为 50 个字节。如果要对值进行 base64 编码，则 50 字节的最大长度适用于编码之前的值。

## 在字符串匹配条件中添加和删除筛选条件
<a name="classic-web-acl-string-conditions-editing"></a>

您可以将筛选条件添加到字符串匹配条件或删除筛选条件。要更改筛选条件，请添加一个新筛选条件并删除旧条件。<a name="classic-web-acl-string-conditions-editing-procedure"></a>

**在字符串匹配条件中添加或删除筛选条件**

1. 登录 Amazon Web Services 管理控制台 并打开 Amazon WAF 控制台，网址为[https://console.aws.amazon.com/wafv2/](https://console.amazonaws.cn/wafv2/)。

   如果您在导航窗格中看到 “**切换到 Amazon WAF 经典版**”，请将其选中。

1. 在导航窗格中，选择**字符串和正则表达式匹配**。

1. 选择要在其中添加或删除筛选条件的条件。

1. 要添加筛选条件，请执行以下步骤：

   1. 选择 **添加筛选条件**。

   1. 指定适用的筛选条件设置。有关更多信息，请参阅 [创建或编辑字符串匹配条件时指定的值](#classic-web-acl-string-conditions-values)。

   1. 选择**添加**。

1. 要删除筛选条件，请执行以下步骤：

   1. 选择要删除的筛选条件。

   1. 选择 **删除筛选条件**。

## 删除字符串匹配条件
<a name="classic-web-acl-string-conditions-deleting"></a>

如果要删除某个字符串匹配条件，需要先删除该条件中的所有筛选条件，然后从使用该条件的所有规则中将其删除，如以下过程中所述。<a name="classic-web-acl-string-conditions-deleting-procedure"></a>

**删除字符串匹配条件**

1. 登录 Amazon Web Services 管理控制台 并打开 Amazon WAF 控制台，网址为[https://console.aws.amazon.com/wafv2/](https://console.amazonaws.cn/wafv2/)。

   如果您在导航窗格中看到 “**切换到 Amazon WAF 经典版**”，请将其选中。

1. 从使用某个字符串匹配条件的规则中删除该条件：

   1. 在导航窗格中，选择**规则**。

   1. 选择使用要删除的字符串匹配条件的规则的名称。

   1. 在右窗格中，选择**编辑规则**。

   1. 选择要删除的条件旁边的 **X**。

   1. 选择**更新**。

   1. 对使用要删除的字符串匹配条件的所有其余规则重复这些步骤。

1. 从要删除的条件中删除筛选条件：

   1. 在导航窗格中，选择**字符串和正则表达式匹配**。

   1. 选择要删除的字符串匹配条件的名称。

   1. 在右窗格中，选中**筛选条件**旁边的复选框，以选择所有筛选条件。

   1. 选择**删除筛选条件**。

1. 在导航窗格中，选择**字符串和正则表达式匹配**。

1. 在**字符串和正则表达式匹配条件**窗格中，选择要删除的字符串匹配条件。

1. 选择**删除**删除所选条件。