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

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

Web 请求组件设置

本节介绍您可以为检查 Web 请求组件的规则语句指定的设置。有关用法的信息,请参阅各个规则语句。

请求组件

请求组件指定要检查的 Amazon WAF 的 Web 请求部分。您可以为在 Web 请求中查找模式的标准规则语句指定此项。其中包括正则表达式模式匹配、SQL 注入攻击和大小约束语句。

除非另有说明,否则如果 Web 请求没有规则语句中指定的请求组件,则请求将结果为与规则不匹配。

注意

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

Amazon WAF 控制台和 API 文档在以下位置提供有关这些设置的指南:

  • 规则生成器在控制台上 — 在Statement设置中,选择要检查的组件,在检查对话框请求组件.

  • API 语句内容FieldToMatch

以下是要检查的 Web 请求部分的选项:

要检查的请求部分的选项

标头

特定请求标头。对于此选项,您可以在 Header type (标头类型) 字段中选择标头名称,例如,User-AgentReferer

HTTP method

HTTP 方法,指示 Web 请求要求源执行的操作的类型。

查询字符串

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

注意

对于跨站点脚本匹配条件,我们建议您选择 All query parameters (所有查询参数),而不是 Query string (查询字符串)。选择All query parameters (所有查询参数)将 10 个 WCU 添加到基本成本中。

Single query parameter (单个查询参数)

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

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

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

All query parameters (所有查询参数)

Single query parameter (单个查询参数) 类似,但 Amazon WAF 检查查询字符串中所有参数的值。例如,如果 URL 为 www.xyz.com?UserName=abc&SalesRegion=seattle,并且如果 UserNameSalesRegion 的值与检查条件匹配,Amazon WAF 则会触发匹配。

选择此选项可将 10 个 WCU 添加到基本成本中。

URI 路径

URL 中标识资源的部分 (例如 /images/daily-ad.jpg)。如果您DIKE使用带有此选项的文本转换Amazon WAF不会规范化 URI,并会按照在请求中从客户端接收它时的原样对其进行检查。

Body

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

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

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

注意

仅将请求正文的前 8 KB(8,192 字节)转发到以 Amazon WAF 以供检查。如果您不需要检查 8 KB 以上的内容,则可以通过组合用于检查 Web 请求正文的语句和大小约束规则语句(对请求正文强制 8 KB 最大大小)来保证您禁止传入其他字节。有关大小约束语句的信息,请参阅。大小约束规则语句.Amazon WAF 不支持检查正文超过 8 KB 的 Web 请求的全部内容。

您也可以将正文评估为解析的 JSON。有关此信息,请参阅以下各节。

JSON 正文

紧跟在请求标头之后的请求部分。正文包含 Web 请求所需的任何其他数据,例如,表单中的数据。您还可以将正文评估为纯文本。有关此的信息,请参阅上部分。

  • 在控制台中,您可以在请求选项choiceBody,方法是选择内容类型choiceJSON.

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

注意

仅将请求正文的前 8 KB(8,192 字节)转发到以 Amazon WAF 以供检查。如果您不需要检查 8 KB 以上的内容,则可以通过组合用于检查 Web 请求正文的语句和大小约束规则语句(对请求正文强制 8 KB 最大大小)来保证您禁止传入其他字节。有关大小约束语句的信息,请参阅。大小约束规则语句.Amazon WAF 不支持检查正文超过 8 KB 的 Web 请求的全部内容。

有关 JSON 车身检查的详细信息,请参阅以下部分。选择 JSON 正文选项会使匹配语句的基本开销 WCU 加倍。例如,如果匹配语句基本开销为 5 个 WCU,而不进行 JSON 解析,则使用 JSON 解析将成本翻倍至 10 个 WCU。

JSON 正文请求组件

JSON 身体检查提供 Web 请求主体的专门检查。有关 Web 请求主体检查的一般信息,请参阅前一节。

何时Amazon WAF将 Web 请求正文检查为解析的 JSON,它会解析并从 JSON 中提取元素,并检查使用规则的匹配语句条件指示的部分。

选择此选项会使匹配语句的基本开销 WCU 加倍。例如,如果匹配语句基本开销为 5 个 WCU,而不进行 JSON 解析,则使用 JSON 解析将成本翻倍至 10 个 WCU。

有了这一备选办法,Amazon WAF对 Web 请求主体运行两个匹配模式,第一个模式的输出用作第二个匹配模式的输入:

  1. Amazon WAF解析和提取 JSON 内容并标识要检查的元素。要实现此目的,应按照Amazon WAF使用您在规则的 JSON 正文规范中提供的条件。

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

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

  • 正文解析回退行为— 什么Amazon WAF如果它无法完全解析 JSON 正文,应该这样做。这些选项如下所示:

    • 无 (默认行为)-Amazon WAF仅评估内容,直到它遇到解析错误的点。

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

    • Match– 将 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应检查。您可以指定密钥,或者全部对于键和值。

  • 要检查的内容— 解析和提取的 JSON 中您想要的元素Amazon WAF进行检查。

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

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

    • 仅包含的元素-仅评估 JSON 中与您提供的 JSON 指针条件匹配的元素。有关 JSON 指针语法的信息,请参阅 Internet Engineering Task Force (IETF) 文档JavaScript 对象表示法 (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.

文本转换

在查找模式或设置约束的语句中,您可以提供 Amazon WAF 要在检查请求之前应用的转换。转换会重新设置 Web 请求的格式,消除了一些不寻常的格式,可防范攻击者使用它们以试图绕过 Amazon WAF。

当您将其与 JSON 正文请求组件选择一起使用时,Amazon WAF在解析和提取要从 JSON 检查的元素之后应用您的转换。有关更多信息,请参阅上一部分,JSON 正文请求组件.

如果提供多个转换,还应当设置 Amazon WAF 应用这些转换的顺序。

世界协调单位— 每个文本转换为 10 WCU。

Amazon WAF 控制台和 API 文档还在以下位置提供有关这些设置的指南:

  • 规则生成器在控制台上 —文本转换. 当您使用请求组件时,可使用此选项。

  • API 语句内容TextTransformations

文本转换的选项

Base64 解码

Amazon WAF解码一个 Base64 编码字符串。

Base64 解码

Amazon WAF解码 Base64 编码的字符串,但使用宽容的实现,忽略无效的字符。

Command line

此选项可减少攻击者可能注入操作系统命令行命令并使用不寻常的格式伪装部分或全部命令的情况。

使用此选项可执行以下转换:

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

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

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

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

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

压缩空格

Amazon WAF 用一个空格替换多个空格,并将以下字符替换为空格字符(十进制 32):

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

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

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

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

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

  • 不间断空格,十进制 160

CSS 解码

Amazon WAF解码使用 CSS 2.x 转义规则编码的字符syndata.html#characters. 此函数在解码过程中最多使用两个字节,因此它可以帮助发现使用 CSS 编码而通常不会编码的 ASCII 字符。它在反斜杠和非十六进制字符的组合中也很有用。例如,对于用于 JavaScript 的 JA\ vascript。

转义序列解码

Amazon WAF解码以下 ANSI C 转义序列:\a, \b, \f, \n, \r, \t, \v, \\, \?, \', \", \xHH (hexadecimal), \0OOO (octal). 无效的编码将保留在输出中。

十六进制解码

Amazon WAF将十六进制字符串解码为二进制文件。

HTML 实体解码

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

  • " 替换为 "

  •   替换为不间断空格(十进制 160)

  • &lt; 替换为 <

  • &gt; 替换为 >

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

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

JS 解码

Amazon WAF解码 JavaScript 转义序列。如果\uHHHH代码在全宽 ASCII 代码范围内FF01-FF5E,则使用较高的字节来检测和调整较低的字节。如果不是,则只使用较低的字节并将较高的字节归零,从而可能导致信息丢失。

小写

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

MD5

Amazon WAF根据输入中的数据计算 MD5 哈希值。计算出的哈希采用原始二进制形式。

Amazon WAF将按接收时的原样检查 Web 请求,而不会进行任何文本转换。

规格化路径

Amazon WAF删除多个斜杠、目录自引用和不在输入字符串开头的目录反向引用。

规范化路径

Amazon WAF这样的处理NORMALIZE_PATH,但首先将反斜杠字符转换为正斜杠。

删除空值

Amazon WAF删除所有NULL字节。

替换注释

Amazon WAF将每次出现的 C 风格注释 (/*... */) 替换为单个空格。不会压缩多次连续出现的情况。未终止的注释也会替换为空格 (ASCII 0x20)。但是,评论 (*/) 的独立终止不会被处理。

替换 NULL

Amazon WAF替换NULL字节中的空格字符(ASCII 0x20)。

SQL 十六进制解码

Amazon WAF解码 SQL 十六进制数据。例如,(0x414243)被解码为(ABC)。

URL decode

Amazon WAF解码 URL 编码的值。

URL decode

LIKEURL_DECODE,但支持微软特定的%u编码。如果代码在全宽 ASCII 代码范围内FF01-FF5E,则使用较高的字节来检测和调整较低的字节。否则,只使用较低的字节,较高的字节将被归零。

UTF8 到统一码

Amazon WAF将所有 UTF-8 字符序列转换为 Unicode。这有助于输入规范化,并最大限度地减少非英语语言的误报和假否定。