请求组件选项 - Amazon WAFAmazon Firewall Manager、和 Amazon Shield Advanced
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

请求组件选项

本部分将介绍您可以指定检查 Web 请求的哪些组件。您可以为在 Web 请求中查找模式的匹配规则语句指定请求组件。其中包括字符串匹配、正则表达式模式匹配、SQL 注入攻击和大小约束语句。有关如何使用这些请求组件设置的信息,请访问 匹配规则语句,参阅各个规则语句。

除非另有说明,否则,如果 Web 请求没有规则语句中指定的请求组件,则 Amazon WAF 会将该请求评估为与规则条件不匹配。

注意

您可以为每个需要它的规则语句指定一个请求组件。要检查请求的多个组件,请为每个组件创建一条规则语句。

Amazon WAF 控制台和 API 文档为以下位置的请求组件设置提供了指导:

  • 控制台上的规则生成器 – 在常规规则类型的语句设置中,在请求组件下的检查对话框中选择要检查的组件。

  • API 语句内容FieldToMatch

本节的其余部分将介绍 Web 请求检查部分的选项。

HTTP method

检查请求中的 HTTP 方法。HTTP 方法指示 Web 请求要求受保护的资源执行的操作的类型,如 POSTGET

单个标头

检查请求中的单个命名标头。对于此选项,您可以指定标头名称,例如 User-AgentReferer。名称的字符串不区分大小写。

所有标头

检查所有请求标头,包括 Cookie。您可以应用筛选器来检查所有标头的子集。对于此选项,您需要提供以下规范:

  • 匹配模式-用于获取标题子集以供检查的过滤器。 Amazon WAF 在标题键中查找这些模式。

    匹配模式设置可采用以下的一种设置:

    • 全部 – 匹配所有键。评估所有标头的规则检查条件。

    • 排除标头 – 仅检查其键与此处指定的任何字符串都不匹配的标头。键的字符串匹配不区分大小写。

    • 包含标头 – 仅检查键与此处指定的字符串之一匹配的标头。键的字符串匹配不区分大小写。

  • 匹配范围-标题中 Amazon WAF 应根据规则检查标准进行检查的部分。您可以指定全部来检查键和值是否匹配。

    全部不需要在键中找到匹配项,也无需在值中找到匹配项。它需要在键或值中找到匹配项,或者两者兼有。如需要求在键和值中进行匹配,请使用逻辑 AND 语句组合两个匹配规则,一个检查键,另一个检查值。

  • 超大处理 — Amazon WAF 应如何处理标头数据大于 Amazon WAF 可以检查的请求。 Amazon WAF 最多可以检查请求标头的前 8 KB(8,192 字节),最多可以检查前 200 个标头。在达到第一个限制之前 Amazon WAF ,内容可供检查。您可以选择继续检查,也可以跳过检查并将请求标记为匹配或不匹配规则。有关处理超大处理内容的更多信息,请参阅 在中处理超大的 Web 请求组件 Amazon WAF

标头顺序

检查包含请求标头名称列表的字符串,这些标头名称按 Amazon WAF 收到以供检查的 Web 请求中显示的顺序排列。 Amazon WAF 生成字符串,然后将其用作字段来匹配检查中的组件。 Amazon WAF 例如,用冒号分隔字符串中的标题名称,不添加空格。host:user-agent:accept:authorization:referer

对于此选项,您需要提供以下规范:

  • 超大处理 — Amazon WAF 应如何处理标头数据数量大于或大于 Amazon WAF 可以检查的请求。 Amazon WAF 最多可以检查请求标头的前 8 KB(8,192 字节),最多可以检查前 200 个标头。在达到第一个限制之前 Amazon WAF ,内容可供检查。您可以选择继续检查可用标头,也可以跳过检查并将请求标记为匹配或不匹配规则。有关处理超大处理内容的更多信息,请参阅 在中处理超大的 Web 请求组件 Amazon WAF

Cookie

检查所有请求 Cookie。您可以应用筛选器来检查所有 Cookie 的子集。对于此选项,您需要提供以下规范:

  • 匹配模式 – 用于获取 Cookie 子集以供检查的筛选器。 Amazon WAF 在 Cookie 密钥中查找这些模式。

    匹配模式设置可采用以下的一种设置:

    • 全部 – 匹配所有键。评估所有 Cookie 的规则检查条件。

    • 排除 Cookie – 仅检查其键与此处指定的任何字符串都不匹配的 Cookie。键的字符串匹配不区分大小写且必须精确。

    • 包含 Cookie – 仅检查键与此处指定的字符串之一匹配的 Cookie。键的字符串匹配不区分大小写且必须精确。

  • 匹配范围 — Cookie 中 Amazon WAF 应根据规则检查标准进行检查的部分。您可以为键和值指定全部

    全部不需要在键中找到匹配项,也无需在值中找到匹配项。它需要在键或值中找到匹配项,或者两者兼有。如需要求在键和值中进行匹配,请使用逻辑 AND 语句组合两个匹配规则,一个检查键,另一个检查值。

  • 超大处理 — Amazon WAF 应如何处理 cookie 数据大于 Amazon WAF 可以检查的请求。 Amazon WAF 最多可以检查请求的 cookie 的前 8 KB(8,192 字节),最多可以检查前 200 个 cookie。在达到第一个限制之前 Amazon WAF ,内容可供检查。您可以选择继续检查,也可以跳过检查并将请求标记为匹配或不匹配规则。有关处理超大处理内容的更多信息,请参阅 在中处理超大的 Web 请求组件 Amazon WAF

URI 路径

检查 URL 中标识资源的部分(例如 /images/daily-ad.jpg)。有关信息,请参阅统一资源标识符 (URI):一般语法

如果您不使用带有此选项的文本转换,则 Amazon WAF 不会对 URI 进行标准化处理,并完全按照请求中从客户端收到的内容进行检查。有关文本转换的信息,请参阅 文本转换

JA3 指纹

检查请求的 JA3 指纹。JA3 指纹是一个 32 字符的哈希值,源自传入请求的 TLS Client Hello。此指纹用作客户端 TLS 配置的唯一标识符。 Amazon WAF 计算并记录每个具有足够的 TLS Client Hello 信息用于计算的请求的此指纹。几乎所有的 Web 请求都包含此信息。

如何获取客户端的 JA3 指纹

您可以从 Web ACL 日志中获取客户端请求的 JA3 指纹。 Amazon WAF 如果能够计算出指纹,它就会将其包含在日志中。有关日志记录字段的信息,请参阅 日志字段

规则语句要求

您只能在字符串匹配语句中检查 JA3 指纹,该语句设置为与您提供的字符串完全匹配。在字符串匹配语句规范中提供日志中的 JA3 指纹字符串,以便与今后任何具有相同 TLS 配置的请求相匹配。有关字符串匹配语句的信息,请参阅 字符串匹配规则语句

您必须为此规则语句提供回退行为。如果无法计算 JA3 指纹,则回退行为 Amazon WAF 是您 Amazon WAF 要分配给 Web 请求的匹配状态。如果您选择匹配, Amazon WAF 会将 Web 请求视为与规则语句匹配,并将规则操作应用于请求。如果您选择不匹配,则 Amazon WAF 会将请求视为与规则语句不匹配。

如需使用此匹配选项,必须记录您的 Web ACL 流量。有关信息,请参阅 记录 Amazon WAF Web ACL 流量

查询字符串

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

注意

对于跨站点脚本匹配语句,我们建议您选择所有查询参数,而不是查询字符串。选择所有查询参数将在基本成本的基础上增加 10 个 WCU。

Single query parameter (单个查询参数)

检查您定义为查询字符串一部分的单个查询参数。 Amazon WAF 检查您指定的参数的值。

对于此选项,您还可以指定一个查询参数。例如,如果 URL 为 www.xyz.com?UserName=abc&SalesRegion=seattle,则可以为该查询参数指定 UserNameSalesRegion。参数名称的长度上限是 30 个字符。名称不区分大小写,因此如果您指定 UserName 作为名称, Amazon WAF 匹配 UserName 的所有变体,包括 usernameUsERName

如果查询字符串包含您指定的查询参数的多个实例,则使用OR逻辑 Amazon WAF 检查所有值是否存在匹配项。例如,在 URL www.xyz.com?SalesRegion=boston&SalesRegion=seattle 中, Amazon WAF 根据 bostonseattle 评估您指定的名称。如果匹配其中任意一个,则检查匹配。

All query parameters (所有查询参数)

检查请求中的所有查询参数。这与单一查询参数组件选择类似,但 Amazon WAF 会检查查询字符串中所有参数的值。例如,如果 URL 为 www.xyz.com?UserName=abc&SalesRegion=seattle,并且如果 UserNameSalesRegion 的值与检查条件匹配, Amazon WAF 则会触发匹配。

选择此选项会在基本成本的基础上增加 10 个 WCU。

Body

以纯文本形式检查请求正文。您也可以使用 JSON 内容类型将正文评估为 JSON。

请求正文紧跟在请求标头之后的请求部分。它包含 Web 请求所需的任何其他数据,例如,表单中的数据。

  • 在控制台中,您可以在请求选项选择正文下选择此选项,方法是选择内容类型选择纯文本

  • 在 API 中,您可以在规则的 FieldToMatch 规范中指定 Body 以纯文本形式检查请求正文。

对于 Applicati Amazon AppSync on Load Balancer 和, Amazon WAF 可以检查请求正文的前 8 KB。对于 CloudFront,默认情况下,API Gateway、Amazon Cognito、App Runner 和 Verified Access Amazon WAF 可以检查前 16 KB,您可以在 Web ACL 配置中将限制提高到 64 KB。有关更多信息,请参阅 管理车身检查的大小限制

您必须为此组件类型指定超大尺寸处理。超大处理定义了如何 Amazon WAF 处理主体数据大于 Amazon WAF 可以检查的请求。您可以选择继续检查,也可以跳过检查并将请求标记为匹配或不匹配规则。有关处理超大处理内容的更多信息,请参阅 在中处理超大的 Web 请求组件 Amazon WAF

您也可以将正文评估为已解析的 JSON。有关信息,请参阅下面的部分。

JSON 正文

检查以 JSON 形式评估的请求正文。您还可以以纯文本形式评估正文。

请求正文紧跟在请求标头之后的请求部分。它包含 Web 请求所需的任何其他数据,例如,表单中的数据。

  • 在控制台中,您可以在请求选项选择正文下选择此选项,方法是选择内容类型选择JSON

  • 在 API 中,您可以在规则的 FieldToMatch 规范中指定 JsonBody

对于 Applicati Amazon AppSync on Load Balancer 和, Amazon WAF 可以检查请求正文的前 8 KB。对于 CloudFront,默认情况下,API Gateway、Amazon Cognito、App Runner 和 Verified Access Amazon WAF 可以检查前 16 KB,您可以在 Web ACL 配置中将限制提高到 64 KB。有关更多信息,请参阅 管理车身检查的大小限制

您必须为此组件类型指定超大尺寸处理。超大处理定义了如何 Amazon WAF 处理主体数据大于 Amazon WAF 可以检查的请求。您可以选择继续检查,也可以跳过检查并将请求标记为匹配或不匹配规则。有关处理超大处理内容的更多信息,请参阅 在中处理超大的 Web 请求组件 Amazon WAF

当将 Web 请求正文作为已解析的 JSON 进行 Amazon WAF 检查时,它会解析并从 JSON 中提取元素,并使用规则的匹配语句标准检查您指定的部分。

选择此选项会使匹配语句的基本成本 WCU 翻倍。例如,如果在没有 JSON 解析的情况下,匹配语句的基本成本为 5 个 WCU,则使用 JSON 解析会将成本加倍到 10 个 WCU。

使用此选项,将针对 Web 请求正文 Amazon WAF 运行两种匹配模式。第一个匹配模式的输出用作第二个匹配模式的输入:

  1. Amazon WAF 解析和提取 JSON 内容并识别要检查的元素。为此,请 Amazon WAF 使用您在规则的 JSON 正文规范中提供的标准。

  2. Amazon WAF 对提取的元素应用任何文本转换,然后将生成的 JSON 元素集与规则语句的匹配条件进行匹配。如果有任何元素匹配,则 Web 请求与该规则匹配。

您可以为 Amazon WAF 第一个模式匹配步骤指定以下标准,以识别要检查的 JSON 元素:

  • 正文解析后备行为 – 如果它无法完全解析 JSON 正文, Amazon WAF 应该怎么做。这些选项如下所示:

    • 无(默认行为)-仅在内容遇到解析错误之前对其进行 Amazon WAF 评估。

    • 评估为字符串-以纯文本形式检查正文。 Amazon WAF 将您为 JSON 检查定义的文本转换和检查标准应用于正文文本字符串。

    • 匹配-将 Web 请求视为与规则语句相匹配。 Amazon WAF 将规则操作应用于请求。

    • 不匹配 – 将 Web 请求视为与规则语句不匹配。

    Amazon WAF 尽最大努力解析整个 JSON 正文,但由于字符无效、密钥重复、截断以及根节点不是对象或数组的任何内容等原因,可能会被迫停止解析。

    Amazon WAF 将以下示例中的 JSON 解析为两个有效的键:值对:

    • 缺少逗号:{"key1":"value1""key2":"value2"}

    • 缺少冒号:{"key1":"value1","key2""value2"}

    • 额外的冒号:{"key1"::"value1","key2""value2"}

  • JSON 匹配范围 — JSON 中 Amazon WAF 应检查的元素类型。您可以为键和值指定全部

    全部不需要在键中找到匹配项,也无需在值中找到匹配项。它需要在键或值中找到匹配项,或者两者兼有。如需要求在键和值中进行匹配,请使用逻辑 AND 语句组合两个匹配规则,一个检查键,另一个检查值。

  • 要检查的内容-已解析和提取的 JSON 中 Amazon WAF 要检查的元素。

    您必须指定以下各项之一:

    • 完整的 JSON 内容 – 评估已解析的 JSON 中的所有元素。

    • 仅包含的元素 – 仅评估 JSON 中与您提供的 JSON 指针条件相匹配的元素。有关 JSON 指针语法的信息,请参阅互联网工程任务组 (IETF) 文档JavaScript 对象表示法 (JSON) 指针

      不要使用此选项来包含 JSON 中的 所有路径。改用完整 JSON 内容

      例如,您可以在控制台中提供以下信息:

      /dogs/0/name /dogs/1/name

      在 API 或 CLI 中,您可以提供以下内容:

      "IncludedPaths": ["/dogs/0/name", "/dogs/1/name"]
JSON 正文检查场景示例

如果包含的元素设置为 /a/b,则对于以下 JSON 正文:

{ "a":{ "c":"d", "b":{ "e":{ "f":"g" } } } }

以下列表描述 Amazon WAF 了每个匹配范围设置的计算结果。键 b 作为所包含的元素路径的一部分,不会进行评估。

  • 对于设置为“全部”的匹配范围:ef,g

  • 对于设置为“键”的匹配范围:ef

  • 对于设置为“值”的匹配范围:g