在 AWS WAF 中使用文本转换 - AWS WAF、AWS Firewall Manager、AWS Shield Advanced 和 AWS Shield 网络安全分析器

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

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

在 AWS WAF 中使用文本转换

本节介绍了如何在检查请求之前提供 AWS WAF 要应用的转换。

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

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

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

WCU – 每个文本转换为 10 WCU。

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

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

  • API 语句内容TextTransformations

文本转换的选项

每个转换列表都显示了控制台和 API 规范,后面是相应描述。

Base64 decode – BASE64_DECODE

AWS WAF 对 Base64 编码字符串进行解码。

Base64 decode extension – BASE64_DECODE_EXT

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

Command line – CMD_LINE

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

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

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

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

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

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

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

Compress whitespace – COMPRESS_WHITE_SPACE

AWS WAF 压缩空格,它用一个空格替换多个空格,并将以下字符替换为空格字符(ASCII 32):

  • Formfeed (ASCII 12)

  • Tab (ASCII 9)

  • 换行符 (ASCII 10)

  • 回车 (ASCII 13)

  • 垂直制表符 (ASCII 11)

  • 不间断空格 (ASCII 160)

CSS decode – CSS_DECODE

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

Escape sequences decode – ESCAPE_SEQ_DECODE

AWS WAF 解码以下 ANSI C 转义序列:\a\b\f\n\r\t\v\\\?\'\"\xHH、(十六进制)、\0OOO(八进制)。无效的编码保留在输出中。

Hex decode – HEX_DECODE

AWS WAF 将十六进制字符串解码为二进制。

HTML entity decode – HTML_ENTITY_DECODE

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

AWS WAF 将以下 HTML 编码的字符替换为未编码的字符。此列表使用小写的 HTML 编码,但处理方式不区分大小写,比如 &QuOt;" 以相同方式处理。

HTML 编码字符

替换为……

"

"

&

&

<

<

&gt;

>

&nbsp; 或者&NonBreakingSpace;

不间断空格,十进制 160

&NewLine;

\n,十进制 10

&Tab;

\t,十进制 9

&lcub; 或者&lbrace;

{

&verbar;&vert;&VerticalLine;

|

&rcub; 或者&rbrace;

}

&excl;

!

&num;

#

&dollar;

$

&percent; 或者&percnt;

%

&apos;

\

&lpar;

(

&rpar;

)

&ast; 或者&midast;

*

&plus;

+

&comma;

,

&period;

.

&sol;

/

&colon;

:

&semi;

;

&equals;

=

&quest;

?

&tilde; 或者&DiacriticalTilde;

~

&minus;

-

&lsqb; 或者&lbrack;

[

&bsol;

\\

&rsqb; 或者&rbrack;

]

&hat;

^

&lowbar; 或者&underbar;

_

&grave; 或者&DiacriticalGrave;

`

JS decode – JS_DECODE

AWS WAF 对 JavaScript 转义序列进行解码。如果 \uHHHH 编码在 FF01-FF5E 的全角 ASCII 码范围内,则较高的字节用于检测和调整较低的字节。如果不是,则仅使用较低的字节,将较高的字节归零,从而可能导致信息丢失。

Lowercase – LOWERCASE

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

MD5 – MD5

AWS WAF 根据输入中的数据计算 MD5 哈希。计算的哈希是原始二进制形式。

None – NONE

AWS WAF 检查收到的 Web 请求,不进行任何文本转换。

Normalize path – NORMALIZE_PATH

AWS WAF 通过删除不在输入开头的多个斜杠、目录自引用和目录反向引用来实现输入字符串的标准化。

Normalize path Windows – NORMALIZE_PATH_WIN

AWS WAF 将反斜杠字符转换为正斜杠,然后使用 NORMALIZE_PATH 转换处理产生的字符串。

Remove nulls – REMOVE_NULLS

AWS WAF 从输入中移除所有 NULL 字节。

Replace comments – REPLACE_COMMENTS

AWS WAF 将每次出现的 C 样式注释 (/* ... */) 替换为一个空格。它不会压缩连续出现的多个事件。它会将未终止的注释替换为空格 (ASCII 0x20)。它不会更改独立终止的注释 (*/)。

Replace nulls – REPLACE_NULLS

AWS WAF 将输入中的各个 NULL 字节替换为空格字符 (ASCII 0x20)。

SQL hex decode – SQL_HEX_DECODE

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

URL decode – URL_DECODE

AWS WAF 解码 URL 编码的值。

URL decode Unicode – URL_DECODE_UNI

URL_DECODE 类似,但支持 Microsoft 特定的 %u 编码。如果代码在 FF01-FF5E 的全角 ASCII 码范围内,则较高的字节用于检测和调整较低的字节。否则,仅使用较低的字节,将较高的字节归零。

UTF8 to Unicode – UTF8_TO_UNICODE

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