

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

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

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

# 使用 SQL 注入匹配条件
<a name="classic-web-acl-sql-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)。

攻击者有时会将恶意 SQL 代码插入到 web 请求中，以试图从数据库提取数据。要允许或阻止表现为包含恶意 SQL 代码的 web 请求，请创建一个或多个 SQL 注入匹配条件。SQL 注入匹配条件用于标识您希望 C Amazon WAF lassic 检查的 Web 请求部分，例如 URI 路径或查询字符串。在这个过程中的稍后阶段，在创建 web ACL 时，需要指定是允许还是阻止表现为包含恶意 SQL 代码的请求。

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

## 创建 SQL 注入匹配条件
<a name="classic-web-acl-sql-conditions-creating"></a>

创建 SQL 注入匹配条件时，需要指定过滤器，这些过滤器指明希望 C Amazon WAF lassic 检查哪一部分 Web 请求中是否存在恶意 SQL 代码，例如 URI 或查询字符串。您可以将多个筛选条件添加到 SQL 注入匹配条件，也可以为每个筛选条件创建单独的条件。以下是每种配置如何影响 Amazon WAF 经典行为：
+ **每个 SQL 注入匹配条件都有一个以上的过滤器（推荐）**— 当您在规则中添加包含多个过滤器的 SQL 注入匹配条件并将该规则添加到 Web ACL 时，Web 请求只需要匹配 SQL 注入匹配条件中的一个过滤器，Cl Amazon WAF assic 即可根据该条件允许或阻止请求。

  例如，假设您创建一个 SQL 注入匹配条件，并且该条件包含两个筛选条件。一个过滤器指示 Amazon WAF Classic 检查 URI 中是否有恶意 SQL 代码，另一个过滤器指示 Amazon WAF Classic 检查查询字符串。 Amazon WAF *如果请求在 URI 或查询字符串中似乎包含恶意 SQL 代码，Classic 会允许*或*阻止这些请求。*
+ **每个 SQL 注入匹配条件一个过滤器**-将单独的 SQL 注入匹配条件添加到规则并将该规则添加到 Web ACL 时，Web 请求必须匹配所有条件，Cl Amazon WAF assic 才能根据条件允许或阻止请求。

  假设您创建两个条件，每个条件包含前面示例中的两个筛选条件中的一个。当您将两个条件添加到同一个规则并将该规则添加到 Web ACL 时，Cl Amazon WAF assic 仅在 URI 和查询字符串似乎都包含恶意 SQL 代码时才允许或阻止请求。

**注意**  
向规则添加 SQL 注入匹配条件时，还可以将 Amazon WAF Classic 配置为允许或阻止看似*不*包含恶意 SQL 代码的 Web 请求。<a name="classic-web-acl-sql-conditions-creating-procedure"></a>

**创建 SQL 注入匹配条件**

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

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

1. 在导航窗格中，选择 **SQL 注入**。

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

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

1. 选择 **再添加一个筛选条件**。

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

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

## 创建或编辑 SQL 注入匹配条件时指定的值
<a name="classic-web-acl-sql-conditions-values"></a>

创建或更新 SQL 注入匹配条件时，需要指定以下值：

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

**Part of the request to filter on**  
选择每个 Web 请求中您希望 Amazon WAF Classic 检查恶意 SQL 代码的部分：    
**标题**  
指定的请求标头，例如 `User-Agent` 或 `Referer` 标头。如果选择 **Header**，则在 **Header** 字段中指定标头的名称。  
**HTTP method**  
HTTP 方法，指示请求要求源执行的操作的类型。CloudFront 支持以下方法：`DELETE`、`GET`、`HEAD`、`OPTIONS`、`PATCH`、`POST` 和 `PUT`。  
**查询字符串**  
URL 中在 `?` 字符之后出现的部分 (如果有)。  
对于 SQL 注入匹配条件，我们建议您通过**所有查询参数（仅限值）**，而不是**查询字符串**，来选择**要作为筛选条件的请求部分**。  
**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**  
如果您选择 **单一查询参数（仅限值）**，您还将指定 **查询参数名称**。这是您要检查的查询字符串中的参数，例如*UserName*或*SalesRegion*。**查询参数名称** 的最大长度为 30 个字符。**查询参数名称** 不区分大小写。例如，如果您指定*UserName*为**查询参数名称**，它将匹配的所有变体 *UserName*，例如*用户名*和*我们ERName*。  
**所有查询参数（仅限值）**  
与**单一查询参数（仅限值）**类似，但是 C Amazon WAF lassic 不会检查单个参数的值，而是检查查询字符串中所有参数的值是否存在可能的恶意 SQL 代码。例如，如果网址为 “www.xyz.com？UserName=abc& SalesRegion =seattle”，并且您选择了**所有查询参数（仅限值），则如果其中一个或*UserName*的值**可能包含恶意 SQL 代码，C Amazon WAF lassic 将触发匹配。*SalesRegion*

**标题**  
如果您为**要筛选的部分请求**选择了**标头**，请从常用标头列表中选择标头，或者输入希望 C Amazon WAF lassic 检查是否存在恶意 SQL 代码的标头的名称。

**转换**  
在 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 编码的请求。

## 在 SQL 注入匹配条件中添加和删除筛选条件
<a name="classic-web-acl-sql-conditions-editing"></a>

您可以在 SQL 注入匹配条件中添加或删除筛选条件。要更改筛选条件，请添加一个新筛选条件并删除旧条件。<a name="classic-web-acl-sql-conditions-editing-procedure"></a>

**在 SQL 注入匹配条件中添加或删除筛选条件**

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

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

1. 在导航窗格中，选择 **SQL 注入**。

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

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

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

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

   1. 选择**添加**。

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

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

   1. 选择**删除筛选器**。

## 删除 SQL 注入匹配条件
<a name="classic-web-acl-sql-conditions-deleting"></a>

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

**删除 SQL 注入匹配条件**

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

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

1. 在导航窗格中，选择 **SQL 注入**。

1. 在 **SQL injection match conditions** 窗格中，选择要删除的 SQL 注入匹配条件。

1. 在右窗格中，选择 **关联的规则** 选项卡。

   如果使用此 SQL 注入匹配条件的规则的列表为空，请转到步骤 6。如果列表中包含任何规则，则记下这些规则，然后继续执行步骤 5。

1. 要从使用某个 SQL 注入匹配条件的规则中将其删除，请执行以下步骤：

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

   1. 选择使用要删除的 SQL 注入匹配条件的规则的名称。

   1. 在右窗格中，选择要从规则中删除的 SQL 注入匹配条件，然后选择**删除所选条件**。

   1. 对使用要删除的 SQL 注入匹配条件的所有其余规则重复步骤 b 和 c。

   1. 在导航窗格中，选择 **SQL 注入**。

   1. 在 **SQL injection match conditions** 窗格中，选择要删除的 SQL 注入匹配条件。

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