有时,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 或查询字符串属性。 或者,可以选择指定部分匹配项。 匹配条件支持以下运算符:
-
等于:匹配与指定选择器值完全匹配的所有请求字段。 例如,若要选择名为 bearerToken 的标头,请使用
Equals
将选择器设置为 bearerToken 的运算符。 - 开头:匹配以指定选择器值开头的所有请求字段。
- 结尾为:匹配以指定选择器值结尾的所有请求字段。
- 包含:匹配包含指定选择器值的所有请求字段。
-
等于任意值:匹配所有请求字段。 使用
Equals any
运算符时,选择器值将自动设置为*
。 例如,可以使用Equals any
运算符来配置适用于所有请求标头的排除项。
事例敏感性
标头和 Cookie 名称不区分大小写。 查询字符串、POST 参数和 JSON 参数区分大小写。
正文内容检查
某些托管规则在解析为 POST 参数或 JSON 参数之前评估请求正文的原始有效负载。 因此,在某些情况下,你可能会看到值为matchVariableName
InitialBodyContents
或DecodedInitialBodyContents
的日志条目。
例如,假设创建一个排除项,其中包含匹配变量 Request body POST args
和一个选择器来标识和忽略命名的 FOO
POST 参数。 不再看到任何值为 <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 诊断。