使用正则表达式匹配条件 - AWS WAF、AWS Firewall Manager、AWS Shield Advanced 和 AWS Shield 网络安全分析器

介绍 AWS WAF 的全新控制台体验

现在,您可以使用更新后的体验访问控制台中任意位置的 AWS WAF 功能。有关更多详细信息,请参阅 使用更新的控制台体验

使用正则表达式匹配条件

警告

AWS WAF Classic 正经历计划中的生命周期结束过程。有关您所在区域特定的里程碑和日期,请参阅您的 AWS Health 控制面板。

注意

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

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

如果要基于出现在请求中的与正则表达式(regex)模式匹配的字符串允许或阻止 web 请求,请创建一个或多个正则表达式匹配条件。正则表达式匹配条件是一种字符串匹配条件,它确定要搜索的模式,以及 AWS WAF Classic 应对 web 请求检查该模式的部分(如指定标头或查询字符串)。在这个过程中的稍后阶段,在创建 web ACL 时,需要指定是允许还是阻止包含该模式的请求。

创建正则表达式匹配条件

在创建正则表达式匹配条件时,指定标识您要搜索的字符串(使用正则表达式)的模式集。然后,将这些模式集添加到指定 AWS WAF Classic 应对 web 请求检查该模式集的部分(如 URI 或查询字符串)的筛选条件中。

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

将正则表达式匹配条件添加到规则时,您还可以将 AWS WAF Classic 配置为允许或阻止与条件中的值匹配的 web 请求。

AWS WAF Classic 支持大多数标准 Perl 兼容正则表达式(PCRE)。不过,不支持以下各种:

  • 反向引用和捕获子表达式

  • 任意零宽度断言

  • 子例程引用和递归模式

  • 条件模式

  • 回溯控制动词

  • \C 单字节指令

  • \R 换行符匹配指令

  • 匹配重置指令的 \K 开头

  • 标注和嵌入式代码

  • 原子分组和占有式限定符

创建正则表达式匹配条件
  1. 登录到 AWS 管理控制台,然后打开 AWS WAF 控制台,网址为:https://console.aws.amazon.com/wafv2/

    如果您在导航窗格中看到切换到 AWS WAF Classic,请将其选中。

  2. 在导航窗格中,选择字符串和正则表达式匹配

  3. 选择创建条件

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

  5. 选择创建模式集和筛选器(如果您创建新的模式集)或添加筛选器(如果您使用现有模式集)。

  6. 选择创建

创建或编辑正则表达式匹配条件时指定的值

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

名称

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

类型

选择 RegEx 匹配

Part of the request to filter on

选择您希望 AWS WAF Classic 检查其中是否有要匹配的值中所指定模式的每个 web 请求部分:

标题

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

HTTP method

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

查询字符串

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

URI

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

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

Body

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

注意

如果选择正文作为要作为筛选条件的请求部分的值,则 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”中,与 要匹配的值 中的“boston”或“seattle”匹配的模式会触发匹配。

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

所有查询参数(仅限值)

单一查询参数(仅限值)类似,但此处不是检查单一参数的值,而是 AWS WAF Classic 检查查询字符串中所有参数的值,以确定是否存在要匹配的值中指定的模式。例如,在 URL“www.xyz.com?UserName=abc&SalesRegion=seattle”中,要匹配的值中与 UserNameSalesRegion 匹配的模式会触发匹配。

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

如果您从要作为筛选条件的请求部分列表中选择标头,则从常见标头列表中选择标头,或输入您希望 AWS WAF Classic 检查的标头的名称。

转换

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

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

转换可以执行以下操作:

AWS WAF Classic 在针对要匹配的值中的字符串检查 web 请求之前,不会对它执行任何文本转换。

转换为小写形式

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

HTML decode

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

  • " 替换为 &

  •   替换为不间断空格

  • &lt; 替换为 <

  • &gt; 替换为 >

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

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

规范化空格

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

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

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

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

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

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

  • 不间断空格,十进制 160

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

简化命令行

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

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

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

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

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

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

URL 解码

解码 URL 编码的请求。

与请求匹配的正则表达式模式

您可以选择现有的模式集或创建新的模式集。如果您创建新的模式集,请指定以下内容:

新模式集名称

输入名称,然后指定您希望 AWS WAF Classic 搜索的正则表达式模式。

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

要匹配的值的最大长度是 70 个字符。

编辑正则表达式匹配条件

您可以对现有正则表达式匹配条件进行以下更改:

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

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

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

  • 向现有的正则表达式匹配条件添加筛选器(在一个正则表达式匹配条件中只能有一个筛选器。因此,要添加筛选器,您必须先删除该现有筛选器。)

  • 删除现有的正则表达式匹配条件

注意

您无法从现有的筛选条件中添加或删除模式集。您必须编辑模式集,或删除筛选条件并使用新的模式集创建新的筛选条件。

从现有模式集中删除模式
  1. 登录到 AWS 管理控制台,然后打开 AWS WAF 控制台,网址为:https://console.aws.amazon.com/wafv2/

    如果您在导航窗格中看到切换到 AWS WAF Classic,请将其选中。

  2. 在导航窗格中,选择字符串和正则表达式匹配

  3. 选择查看正则表达式模式集

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

  5. 选择编辑

  6. 选择要删除的模式旁边的 X

  7. 选择保存

向现有模式集中添加模式
  1. 登录到 AWS 管理控制台,然后打开 AWS WAF 控制台,网址为:https://console.aws.amazon.com/wafv2/

    如果您在导航窗格中看到切换到 AWS WAF Classic,请将其选中。

  2. 在导航窗格中,选择字符串和正则表达式匹配

  3. 选择查看正则表达式模式集

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

  5. 选择编辑

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

  7. 选择新模式旁边的 +

  8. 选择保存

从现有的正则表达式匹配条件中删除筛选条件
  1. 登录到 AWS 管理控制台,然后打开 AWS WAF 控制台,网址为:https://console.aws.amazon.com/wafv2/

    如果您在导航窗格中看到切换到 AWS WAF Classic,请将其选中。

  2. 在导航窗格中,选择字符串和正则表达式匹配

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

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

  5. 选择删除筛选条件

删除正则表达式匹配条件
  1. 登录到 AWS 管理控制台,然后打开 AWS WAF 控制台,网址为:https://console.aws.amazon.com/wafv2/

    如果您在导航窗格中看到切换到 AWS WAF Classic,请将其选中。

  2. 从正则表达式条件中删除筛选条件。有关执行此操作的说明,请参阅 从现有的正则表达式匹配条件中删除筛选条件

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

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

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

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

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

    5. 选择更新

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

  4. 在导航窗格中,选择字符串和正则表达式匹配

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

  6. 选择删除

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

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

  1. 登录到 AWS 管理控制台,然后打开 AWS WAF 控制台,网址为:https://console.aws.amazon.com/wafv2/

    如果您在导航窗格中看到切换到 AWS WAF Classic,请将其选中。

  2. 从要更改的正则表达式条件中删除筛选条件。有关执行此操作的说明,请参阅 从现有的正则表达式匹配条件中删除筛选条件

  3. 在导航窗格中,选择字符串和正则表达式匹配

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

  5. 选择添加筛选条件

  6. 为新的筛选条件输入适当的值,然后选择 添加