

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

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

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

# 使用正则表达式匹配条件
<a name="classic-web-acl-regex-conditions"></a>

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

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

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

**Topics**
+ [创建正则表达式匹配条件](#classic-web-acl-regex-conditions-creating)
+ [您在创建或编辑 RegEx 匹配条件时指定的值](#classic-web-acl-regex-conditions-values)
+ [编辑正则表达式匹配条件](#classic-web-acl-regex-conditions-editing)

## 创建正则表达式匹配条件
<a name="classic-web-acl-regex-conditions-creating"></a>

在创建正则表达式匹配条件时，指定标识您要搜索的字符串（使用正则表达式）的模式集。然后，您可以将这些模式集添加到过滤器中，这些过滤器指定您希望 AWS WAF Classic 检查该模式集的 Web 请求部分，例如 URI 或查询字符串。

您可以将多个正则表达式添加到单个模式集中。如果您这样做，这些表达式将使用 *OR* 进行组合。也就是说，如果请求的适当部分与列出的任何表达式匹配，则 web 请求将与模式集匹配。

向规则添加正则表达式匹配条件时，还可以将 Cl AWS WAF assic 配置为允许或阻止与条件中的值*不*匹配的 Web 请求。

AWS WAF Classic 支持大多数[标准的 Perl 兼容正则表达式 (PCRE](http://www.pcre.org/))。不过，不支持以下各种：
+ 反向引用和捕获子表达式
+ 任意零宽度断言
+ 子例程引用和递归模式
+ 条件模式
+ 回溯控制动词
+ \$1C 单字节指令
+ \$1R 换行符匹配指令
+ 匹配重置指令的 \$1K 开头
+ 标注和嵌入式代码
+ 原子分组和占有式限定符<a name="classic-web-acl-regex-conditions-creating-procedure"></a>

**创建正则表达式匹配条件**

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

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

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

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

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

1. 选择**创建模式集和筛选器**（如果您创建新的模式集）或**添加筛选器**（如果您使用现有模式集）。

1. 选择**创建**。

## 您在创建或编辑 RegEx 匹配条件时指定的值
<a name="classic-web-acl-regex-conditions-values"></a>

创建或更新正则表达式匹配条件时，需要指定以下值：

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

**Type**  
选择 **RegEx 匹配**。

**Part of the request to filter on**  
在每个 Web 请求中，选择您希望 AWS 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 进行标准化，而是像请求中从客户端 AWS 接收的那样对其进行检查。**转换** 将按指定方式重新设置 URI 的格式。  
**Body**  
请求中包含要作为 HTTP 请求正文发送到 web 服务器的任何附加数据（如表单数据）的部分。  
如果选择**正文**作为**要作为筛选条件的请求部分** 的值，则 AWS WAF Classic 只检查前 8192 个字节 (8 KB)。要允许或阻止正文长度超过 8192 个字节的请求，可以创建大小约束条件。（AWS 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*为 **Query 参数名称**，它将匹配的所有变体 *UserName*，例如*用户名*和 *Us ERName*。  
**所有查询参数（仅限值）**  
与**单一查询参数（仅限值）**类似，但C AWS WAF lassic不会检查单个参数的值，而是检查查询字符串中所有参数的**值以匹配在值**中指定的模式。例如，在 URL “www.xyz.com？UserName=abc& SalesRegion =seattle” 中，要匹配的**值中的模式要么与中的值匹配**，要么触发匹配。*UserName*SalesRegion**

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

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

**与请求匹配的正则表达式模式**  
您可以选择现有的模式集或创建新的模式集。如果您创建新的模式集，请指定以下内容：    
新模式集名称  
输入名称，然后指定您希望 Cl AWS WAF assic 搜索的正则表达式模式。  
如果您将多个正则表达式添加到模式集中，这些表达式将使用 *OR* 进行组合。也就是说，如果请求的适当部分与列出的任何表达式匹配，则 web 请求将与模式集匹配。  
**要匹配的值**的最大长度是 70 个字符。

## 编辑正则表达式匹配条件
<a name="classic-web-acl-regex-conditions-editing"></a>

您可以对现有正则表达式匹配条件进行以下更改：
+ 从现有模式集中删除模式
+ 向现有模式集中添加模式
+ 从现有的正则表达式匹配条件中删除筛选条件
+ 向现有的正则表达式匹配条件添加筛选器（在一个正则表达式匹配条件中只能有一个筛选器。因此，要添加筛选器，您必须先删除该现有筛选器。）
+ 删除现有的正则表达式匹配条件

**注意**  
您无法从现有的筛选条件中添加或删除模式集。您必须编辑模式集，或删除筛选条件并使用新的模式集创建新的筛选条件。<a name="classic-web-acl-regex-conditions-editing-procedure-delete-pattern"></a>

**从现有模式集中删除模式**

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

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

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

1. 选择 **View regex pattern sets**。

1. 选择要编辑的模式集的名称。

1. 选择**编辑**。

1. 选择要删除的模式旁边的 **X**。

1. 选择**保存**。<a name="classic-web-acl-regex-conditions-editing-procedure-add-pattern"></a>

**向现有模式集中添加模式**

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

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

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

1. 选择 **View regex pattern sets**。

1. 选择要编辑的模式集的名称。

1. 选择**编辑**。

1. 输入新的正则表达式模式。

1. 选择新模式旁边的 **\$1**。

1. 选择**保存**。<a name="classic-web-acl-regex-conditions-editing-procedure-delete-filter"></a>

**从现有的正则表达式匹配条件中删除筛选条件**

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

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

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

1. 选择具有要删除的筛选条件的条件的名称。

1. 选中要删除的筛选条件旁边的框。

1. 选择 **删除筛选器**。<a name="classic-web-acl-regex-conditions-editing-procedure-delete-regex-condition"></a>

**删除正则表达式匹配条件**

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

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

1. 从正则表达式条件中删除筛选条件。有关执行此操作的说明，请参阅[从现有的正则表达式匹配条件中删除筛选条件](#classic-web-acl-regex-conditions-editing-procedure-delete-filter)。

1. 从使用某个正则表达式匹配条件的规则中删除该条件：

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

   1. 选择使用要删除的正则表达式匹配条件的规则的名称。

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

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

   1. 选择**更新**。

   1. 对使用要删除的正则表达式匹配条件的所有其余规则重复这些步骤。

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

1. 选择要删除的条件旁边的按钮。

1. 选择**删除**。<a name="classic-web-acl-regex-conditions-editing-procedure-add-filter"></a>

**向现有的正则表达式匹配条件中添加筛选条件或更改其中的筛选条件**

正则表达式匹配条件中只能具有一个筛选条件。如果要添加或更改筛选条件，您必须首先删除现有的筛选条件。

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

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

1. 从要更改的正则表达式条件中删除筛选条件。有关执行此操作的说明，请参阅[从现有的正则表达式匹配条件中删除筛选条件](#classic-web-acl-regex-conditions-editing-procedure-delete-filter)。

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

1. 选择要更改的条件的名称。

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

1. 为新的筛选条件输入适当的值，然后选择 **添加**。