使用字符串匹配条件 - AWS WAFAWS Firewall Manager、和 AWS Shield Advanced

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

使用字符串匹配条件

警告

AWS WAF 经典支持将于 2025 年 9 月 30 日结束。

注意

这是 AWS WAF Classic 文档。只有在 2019 年 11 月 AWS WAF 之前创建了诸如规则和 Web ACLs 之类的 AWS WAF 资源,并且尚未将其迁移到最新版本时,才应使用此版本。要迁移您的网站ACLs,请参阅将您的 AWS WAF 经典资源迁移到 AWS WAF

有关的最新版本 AWS WAF,请参阅AWS WAF

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

创建字符串匹配条件

创建字符串匹配条件时,需要指定筛选器来识别要搜索的字符串以及希望 C AWS WAF lassic 检查该字符串的 Web 请求部分,例如URI或查询字符串。您可以将多个筛选条件添加到字符串匹配条件,也可以为每个筛选条件创建单独的字符串匹配条件。以下是每种配置如何影响 AWS WAF 经典行为:

  • 每个字符串匹配条件一个过滤器-将单独的字符串匹配条件添加到规则并将该规则添加到 Web 时ACL,Web 请求必须匹配所有条件,Cl AWS WAF assic 才能根据条件允许或阻止请求。

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

  • 每个字符串匹配条件不止一个过滤器-当您将包含多个过滤器的字符串匹配条件添加到规则并将该规则添加到 Web 时ACL,Web 请求只需要匹配 Cl AWS WAF assic 字符串匹配条件中的一个过滤器即可根据一个条件允许或阻止请求。

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

注意

向规则添加字符串匹配条件时,还可以将 Cl AWS WAF assic 配置为允许或阻止与条件中的值匹配的 Web 请求。

创建字符串匹配条件
  1. 登录 AWS Management Console 并打开 AWS WAF 控制台,网址为https://console.aws.amazon.com/wafv2/

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

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

  3. 选择 创建条件

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

  5. 选择 添加筛选条件

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

  7. 添加完筛选器后,选择 创建

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

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

名称

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

类型

选择 String match

Part of the request to filter on

选择每个 Web 请求中您希望 AWS WAF Classic 检查的部分,以查找您在要匹配的值中指定的字符串:

标题

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

HTTP方法

HTTP方法,它表示请求请求源执行的操作类型。CloudFront 支持以下方法:DELETEGETHEADOPTIONSPATCHPOST、和PUT

查询字符串

出现在?角色之URL后的部分(如果有)。

URI

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

除非指定了转换,否则不会URI对变换进行标准化,并且 AWS 会像在请求中从客户端收到变换一样进行检查。转换将URI按照指定的方式重新格式化。

Body

请求中包含您要作为请求正文发送到 Web 服务器的任何其他数据(例如来自表单的数据)的部分。HTTP

注意

如果选择正文作为要作为筛选条件的请求部分 的值,则 AWS WAF Classic 只检查前 8192 个字节 (8 KB)。要允许或阻止正文长度超过 8192 个字节的请求,可以创建大小约束条件。(AWS WAF Classic 从请求标头中获取正文的长度。) 有关更多信息,请参阅 使用大小约束条件

单一查询参数(仅限值)

您已定义为查询字符串的一部分的任何参数。例如,如果URL是 “www.xyz.com?UserName=abc& SalesRegion =seattle”,则可以向或参数添加过滤器。UserNameSalesRegion

如果查询字符串中出现重复的参数,求出的值将为“OR”。也就是说,任一个值都将触发匹配。例如,在 URL “www.xyz.com?SalesRegion=boston& SalesRegion =seattle” 中,要匹配的中的 “波士顿” 或 “西雅图” 都将触发匹配。

如果您选择 单一查询参数(仅限值),您还将指定 查询参数名称。这是您要检查的查询字符串中的参数,例如UserNameSalesRegion查询参数名称 的最大长度为 30 个字符。查询参数名称 不区分大小写。例如,如果您指定UserName查询参数名称,它将匹配的所有变体 UserName,例如用户名U sERName

所有查询参数(仅限值)

单一查询参数(仅限值)类似,但C AWS WAF lassic不会检查单个参数的值,而是检查查询字符串中所有参数的值以匹配该值例如,如果URL是 “www.xyz.com?UserName=abc& SalesRegion =seattle”,并且您选择了所有查询参数(仅限值),则如果将UserName或的值指定为要匹配的值,C AWS WAF lass SalesRegionic 将触发匹配。

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

如果您从请求的部分中选择标题以在列表中进行筛选,请从常用标题列表中选择标题,或者输入希望 C AWS WAF lassic 检查的标题的名称。

Match type

在您希望 AWS WAF Classic 检查的请求部分中,选择要匹配的值中的字符串必须出现在哪个位置才能匹配此过滤器:

包含

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

Contains word

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

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

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

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

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

Exactly matches

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

开始于

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

结束于

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

Transformation

在 C AWS WAF lassic 检查请求之前,转换会重新格式化 Web 请求。这消除了攻击者为了绕过 C AWS WAF lassic 而在 Web 请求中使用的一些不寻常的格式。

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

转换可以执行以下操作:

AWS WAF 在检查 Valu e 中的字符串是否匹配之前,Classic 不会对 Web 请求执行任何文本转换。

转换为小写形式

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

HTML解码

AWS WAF Classic 将HTML编码字符替换为未编码的字符:

  • " 替换为 &

  •   替换为不间断空格

  • &lt; 替换为 <

  • &gt; 替换为 >

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

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

规范化空格

AWS WAF Classic 将以下字符替换为空格字符(十进制 32):

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

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

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

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

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

  • 不间断空格,十进制 160

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

Simplify command line

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

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

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

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

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

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

URL解码

对经过编码的请求进行解URL码。

Value is base64 encoded

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

Value to match

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

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

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

在字符串匹配条件中添加或删除筛选条件
  1. 登录 AWS Management Console 并打开 AWS WAF 控制台,网址为https://console.aws.amazon.com/wafv2/

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

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

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

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

    1. 选择 添加筛选条件

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

    3. 选择添加

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

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

    2. 选择 删除筛选条件

删除字符串匹配条件

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

删除字符串匹配条件
  1. 登录 AWS Management Console 并打开 AWS WAF 控制台,网址为https://console.aws.amazon.com/wafv2/

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

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

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

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

    3. 在右窗格中,选择 编辑规则

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

    5. 选择更新

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

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

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

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

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

    4. 选择 删除筛选器

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

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

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