使用字符串匹配条件 - Amazon WAF、Amazon Firewall Manager 和 Amazon Shield Advanced
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

使用字符串匹配条件

注意

这是Amazon WAFClassic文档中)。仅当 2019 年 11 月之前在 Amazon WAF 中创建了 Amazon WAF 资源(例如规则和 Web ACL),但尚未将这些资源迁移到最新版本时,才应使用此版本。要迁移您的资源,请参阅迁移您的Amazon WAFClassic 资源Amazon WAF

对于最新版本的Amazon WAF请参阅Amazon WAF

如果要基于出现在请求中的字符串允许或阻止 Web 请求,请创建一个或多个字符串匹配条件。字符串匹配条件确定要搜索的字符串,以及应对 Web 请求搜索的部分 (如指定标头或查询字符串)Amazon WAF经典的字符串检查。在这个过程中的稍后阶段,在创建 Web ACL 时,需要指定是允许还是阻止包含该字符串的请求。

创建字符串匹配条件

创建字符串匹配条件时,需要指定筛选条件以确定要搜索的字符串,以及应对 Web 请求部分Amazon WAF检查该字符串的典型选择,如 URI 或查询字符串。您可以将多个筛选条件添加到字符串匹配条件,也可以为每个筛选条件创建单独的字符串匹配条件。下面是每种配置影响Amazon WAFClassic 行为:

  • 每个字符串匹配条件都有一个筛— 将单独的字符串匹配条件添加到一个规则并将该规则添加到一个 Web ACL 时,Web 请求必须与所有条件匹配。Amazon WAF经典可以基于条件允许或阻止请求。

    例如,假设您创建两个条件。一个条件与 User-Agent 标头中包含值 BadBot 的 Web 请求匹配。另一个条件与查询字符串中包含值 BadParameter 的 Web 请求匹配。如果这两个条件添加到同一个规则并将该规则添加到一个 Web ACL,则Amazon WAF只有当请求包含两个值时,Classic 才允许或阻止请求。

  • 每个字符串匹配条件的多个筛选条件数— 将包含多个筛选条件的字符串匹配条件添加到一个规则并将该规则添加到一个 Web ACL 时,Web 请求只需与字符串匹配条件中的一个筛选条件匹配Amazon WAF经典,可以根据一个条件允许或阻止请求。

    假设您创建一个而不是两个条件,并且这一个条件包含与前面示例相同的两个筛选条件。Amazon WAFClassic 允许或阻止请求,如果请求包含要么 BadBot中的User-Agent标头或者 BadParameter在查询字符串中。

注意

将字符串匹配条件添加到规则时,您还可以将Amazon WAF经典允许或阻止 Web 请求不执行该操作匹配条件中的值。

创建字符串匹配条件

  1. 登录到Amazon Web Services Management Console打开Amazon WAF控制台https://console.aws.amazon.com/wafv2/

  2. 在导航窗格中,选择 String and regex matching

  3. 选择 Create condition (创建条件)

  4. 指定适用的筛选条件设置。有关更多信息,请参阅创建或编辑字符串匹配条件时指定的值

  5. 选择 Add filter

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

  7. 添加完筛选器后,选择 Create

创建或编辑字符串匹配条件时指定的值

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

名称

为字符串匹配条件输入名称。该名称只能包含字母数字字字符 (A-Z、a-z、0-9) 以及以下特殊字符:_-!” #`+*}, ./. 条件的名称在创建后不可更改。

类型

选择 String match

Part of the request to filter on

选择应对每个 Web 请求的部分Amazon WAF在中检查指定的字符串的经典字符串Value to match

标头

指定的请求标头,例如 User-AgentReferer 标头。如果选择 Header,则在 Header 字段中指定标头的名称。

HTTP method

HTTP 方法,指示请求要求源执行的操作的类型。CloudFront 支持以下方法:DELETEGETHEADOPTIONSPATCHPOSTPUT

查询字符串

URL 中在 ? 字符之后出现的部分 (如果有)。

URI

请求的 URI 路径,用于标识资源,例如/images/daily-ad.jpg。这不包括 URI 的查询字符串或片段组件。想要了解有关信息,请参阅统一资源标识符 (URI):通用语法

除非指定了 Transformation (转换),否则 URI 不会被标准化,并且会被检查,就像 Amazon 是作为请求的一部分从客户端收到它一样。Transformation (转换) 将按指定方式重新设置 URI 的格式。

Body

请求中包含要作为 HTTP 请求正文发送到 Web 服务器的任何附加数据 (如表单数据) 的部分。

注意

如果选择Body (正文)对于Part of the request to filter on、Amazon WAF经典只检查前 8192 个字节 (8 KB)。要允许或阻止正文长度超过 8192 个字节的请求,可以创建大小约束条件。(Amazon WAFClassic 会从请求标头获取正文的长度。) 有关更多信息,请参阅使用大小约束条件

单一查询参数(仅限值)

您已定义为查询字符串的一部分的任何参数。例如,如果 URL 为“www.xyz.com?UserName=abc&SalesRegion=seattle”,您可以向 UserNameSalesRegion 参数添加一个筛选条件。

如果查询字符串中出现重复的参数,求出的值将为“OR”。也就是说,任一个值都将触发匹配。例如,在 URL“www.xyz.com?SalesRegion=boston&SalesRegion=seattle”中,Value to match (要匹配的值) 中无论是“boston”还是“seattle”,都会触发匹配。

如果您选择 Single query parameter (value only) (单一查询参数(仅限值)),您还将指定 Query parameter name (查询参数名称)。这是查询字符串中您将检查的参数,如 UserNameSalesRegionQuery parameter name (查询参数名称) 的最大长度为 30 个字符。Query parameter name (查询参数名称) 不区分大小写。例如,如果您指定 UserName 作为 Query parameter name (查询参数名称),这将匹配 UserName 的所有变体,如 usernameUsERName

所有查询参数(仅限值)

与相似。单一查询参数(仅限值),而不是检查单个参数的值,Amazon WAFClassic (经典) 检查查询字符串中所有参数的值Value to match。例如,如果 URL 是 “www.xyz. 公司用户名 = ABC& 销售区域 = 西雅图”,并且您选择所有查询参数(仅限值)、Amazon WAF经典将触发匹配,如果UserName或者SalesRegion指定为Value to match

Header (仅当“Part of the request to filter on”是“Header”时)

如果您选择标头来自 的Part of the request to filter on列表中,从常见标头列表中选择标头,或输入应使用的标头的名称Amazon WAF经典的检查。

Match type

在您希望的请求部分Amazon WAF经典的检查,选择字符串的位置Value to match必须出现以匹配此过滤器:

包含

字符串在请求的指定部分中的任何位置出现。

Contains word

Web 请求的指定部分必须包含 Value to match,并且 Value to match 必须仅包含字母数字字符或下划线 (A-Z、a-z、0-9 或 _)。此外,Value to match 必须是单词,这表示以下一种情况:

  • Value to match 与 Web 请求的指定部分的值精确匹配,如标头的值。

  • Value to match 处于 Web 请求的指定部分的开头,并且后跟字母数字字符或下划线 (_) 之外的字符 (例如,BadBot;)。

  • Value to match 处于 Web 请求的指定部分的末尾,并且前面是字母数字字符或下划线 (_) 之外的字符 (例如,;BadBot)。

  • Value to match 处于 Web 请求的指定部分的中间,并且前面和后面是字母数字字符或下划线 (_) 之外的字符 (例如,-BadBot;)。

Exactly matches

字符串和请求的指定部分的值是相同的。

从 开始

字符串出现在请求的指定部分的开头。

Ends with

字符串出现在请求的指定部分的末尾。

Transformation

转换可在之前重新格式化 Web 请求Amazon WAF经典检查请求。这可消除一些不寻常的格式,可防范攻击者在 Web 请求中使用它们以试图绕过Amazon WAFClassic。

您只能指定一个类型的文本转换。

转换可以执行以下操作:

Amazon WAFClassic 不会在针对中的字符串检查 Web 请求之前对它执行任何文本转换Value to match

Convert to lowercase

Amazon WAF经典字母将大写字母 (A-Z) 转换为小写字母 (a-z)。

HTML decode

Amazon WAF经典字符替换为未编码的字符:

  • " 替换为 &

  •   替换为不间断空格

  • &lt; 替换为 <

  • &gt; 替换为 >

  • 将以十六进制格式表示的字符 &#xhhhh; 替换为对应字符

  • 将以十进制格式表示的字符 &#nnnn; 替换为对应字符

规范化空格

Amazon WAFClassi( 经典) 将以下字符替换为空格字符 (十进制 32):

  • \f,换页符,十进制 12

  • \t,制表符,十进制 9

  • \n,换行符,十进制 10

  • \r,回车符,十进制 13

  • \v,垂直制表符,十进制 11

  • 不间断空格,十进制 160

此外,此选项将多个空格替换为一个空格。

Simplify command line

如果您担心攻击者注入操作系统命令行命令并使用异常格式伪装部分或所有命令,使用此选项可执行以下转换:

  • 删除以下字符:\ " ' ^

  • 删除以下字符之前的空格:/ (

  • 将以下字符替换为空格:, ;

  • 将多个空格替换为一个空格

  • 将大写字母 (A-Z) 转换为小写字母 (a-z)

URL decode

解码 URL 编码的请求。

Value is base64 encoded

如果 Value to match 中的值进行了 base64 编码,则选中此复选框。使用 base64 编码可指定攻击者在其请求中包含的不可打印的字符 (如制表符和换行符)。

Value to match

指定您需要的值Amazon WAF在 Web 请求中搜索的传统。最大长度为 50 个字节。如果要对值进行 base64 编码,则 50 字节的最大长度适用于编码之前的值。

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

您可以将筛选条件添加到字符串匹配条件或删除筛选条件。要更改筛选条件,请添加一个新筛选条件并删除旧条件。

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

  1. 登录到Amazon Web Services Management Console打开Amazon WAF控制台https://console.aws.amazon.com/wafv2/

  2. 在导航窗格中,选择 String and regex matching

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

  4. 要添加筛选条件,请执行以下步骤:

    1. 选择 Add filter

    2. 指定适用的筛选条件设置。有关更多信息,请参阅创建或编辑字符串匹配条件时指定的值

    3. 选择 Add

  5. 要删除筛选条件,请执行以下步骤:

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

    2. 选择 Delete Filter

删除字符串匹配条件

如果要删除某个字符串匹配条件,需要先删除该条件中的所有筛选条件,然后从使用该条件的所有规则中将其删除,如以下过程中所述。

删除字符串匹配条件

  1. 登录到Amazon Web Services Management Console打开Amazon WAF控制台https://console.aws.amazon.com/wafv2/

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

    1. 在导航窗格中,选择 Rules (规则)

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

    3. 在右窗格中,选择 Edit rule

    4. 选择要删除的条件旁边的 X

    5. 选择 Update

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

  3. 从要删除的条件中删除筛选条件:

    1. 在导航窗格中,选择 String and regex matching

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

    3. 在右窗格中,选中 Filter 旁边的复选框来选择所有筛选条件。

    4. 选择 Delete filter

  4. 在导航窗格中,选择 String and regex matching

  5. String and regex match conditions 窗格中,选择要删除的字符串匹配条件。

  6. 选择 Delete 删除所选条件。