你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
带有 Azure Front Door 排除列表的 Web 应用程序防火墙
有时,Azure Front Door 的 Azure Web 应用程序防火墙可能会阻止合法请求。 在优化 Web 应用程序防火墙 (WAF) 时,可以将 WAF 配置为允许应用程序的请求。 使用 WAF 排除列表,可从 WAF 评估中忽略特定请求属性。 请求的其余部分照常评估。
例如,Microsoft Entra ID 提供用于身份验证的令牌。 在请求标头中使用时,这些令牌可包含可能会导致一个或多个 WAF 规则触发误报检测的特殊字符。 可以将标头添加到排除列表,这会告知 WAF 忽略标头。 WAF 仍会检查请求的其余部分是否存在可疑内容。
排除范围
可以在以下范围内创建排除项:
- 规则集:这些排除项适用于规则集中的所有规则。
- 规则组:这些排除项适用于规则集中特定类别的所有规则。 例如,可以配置适用于所有 SQL 注入规则的排除项。
- 规则:这些排除适用于单个规则。
排除项选择器
排除项选择器会标识排除项适用的请求部分。 WAF 将忽略它在请求的指定部分找到的任何检测。 可以在单个排除项中指定多个排除项选择器。
每个排除项选择器都指定了匹配变量、运算符和选择器。
匹配变量
你可以将以下请求属性添加到排除项:
- 请求标头名称
- 请求 cookie 名称
- 查询字符串参数名称
- 请求正文 POST 参数名称
- 请求正文 JSON 参数名称(在 DRS 2.0 或更高版本上受支持)
不会根据 WAF 规则评估所使用的字段值,但会评估其名称。 排除列表禁用了对该字段值的检查。 但是仍会计算字段名称。 有关详细信息,请参阅排除其他请求属性。
运算符
可以指定请求标头、正文、cookie 或查询字符串属性的完全匹配项。 或者,也可以选择指定部分匹配项。 匹配条件支持以下运算符:
- Equals:匹配与指定选择器值完全匹配的所有请求字段。 例如,若要选择名为“bearerToken”的标头,请结合使用
Equals
运算符和设为“bearerToken”的选择器。 - Starts with:与以指定选择器值开头的所有请求字段匹配。
- Ends with:与以指定选择器值结尾的所有请求字段匹配。
- Contains:与包含指定选择器值的所有请求字段匹配。
- Equals any:与所有请求字段匹配。 使用
Equals any
运算符时,选择器值将自动设置为*
。 例如,可以使用Equals any
运算符配置适用于所有请求标头的排除项。
事例敏感性
标头和 cookie 名称不区分大小写。 查询字符串、POST 参数和 JSON 参数区分大小写。
正文内容检查
某些托管规则会在将请求正文的原始有效负载分析为 POST 参数或 JSON 参数之前先对其进行评估。 因此,在某些情况下,你可能会看到 matchVariableName
值为 InitialBodyContents
或 DecodedInitialBodyContents
的日志条目。
例如,假设创建一个排除项,其中包含 Request body POST args
的匹配变量和用于标识和忽略名为 FOO
的 POST 参数的选择器。 你再也看不到任何 matchVariableName
值为 PostParamValue:FOO
的日志条目。 但是,如果名为 FOO
的 POST 参数包含触发规则的文本,则日志可能会在初始正文内容中显示检测。 当前无法为初始正文内容创建排除项。
基于 Azure Web 应用程序防火墙日志定义排除规则
你可以使用日志来查看被阻止请求的详细信息,包括触发规则的请求部分。 有关详细信息,请参阅 Azure Web 应用程序防火墙监视和日志记录。
有时,特定的 WAF 规则会根据请求标头、Cookie、POST 参数、查询字符串参数或请求正文中的 JSON 字段中包含的值生成误报检测。 如果发生这些误报检测,可以将规则配置为从请求评估中排除请求的相关部分。
下表显示了 WAF 日志中的示例值和可以创建的相应排除项选择器。
WAF 日志中的 matchVariableName | 门户中的规则排除 |
---|---|
CookieValue:SOME_NAME | 请求 cookie 名称等于 SOME_NAME |
HeaderValue:SOME_NAME | 请求标头名称等于 SOME_NAME |
PostParamValue:SOME_NAME | 请求正文 POST 参数名称等于 SOME_NAME |
QueryParamValue:SOME_NAME | 查询字符串参数名称等于 SOME_NAME |
JsonValue:SOME_NAME | 请求正文 JSON 参数名称等于 SOME_NAME |
JSON 请求正文的排除项
从 DRS 版本 2.0 开始,WAF 会检查 JSON 请求正文。 例如,请考虑此 JSON 请求正文:
{
"posts": [
{
"id": 1,
"comment": ""
},
{
"id": 2,
"comment": "\"1=1\""
}
]
}
请求包括 SQL 注释字符序列,WAF 将其检测为潜在的 SQL 注入攻击。
如果确定请求合法,则可以创建一个匹配变量为 Request body JSON args name
、运算符为 Equals
且选择器为 posts.comment
的排除项。
排除其他请求属性
如果 WAF 日志条目显示的 matchVariableName
值不在上表中,则无法创建排除项。 例如,当前无法为 Cookie 名称、标头名称、POST 参数名称或查询参数名称创建排除项。
相反,请考虑执行以下操作之一:
- 禁用提供误报的规则。
- 创建显式允许这些请求的自定义规则。 请求绕过所有 WAF 检查。
具体而言,如果 matchVariableName
的值为 CookieName
、HeaderName
、PostParamName
或 QueryParamName
,则表示字段的名称(而不是其值)已触发规则。 规则排除目前不支持这些 matchVariableName
值。
后续步骤
- 在 Azure Front Door WAF 上配置排除列表。
- 配置 WAF 设置后,即可了解如何查看 WAF 日志。 有关详细信息,请参阅 Azure Front Door 诊断。