Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
适用于: ✔️ Front Door Premium
有时,Azure Front Door中的Azure Web 应用程序防火墙会阻止合法请求。 在优化 Web 应用程序防火墙(WAF)时,可以将 WAF 配置为允许应用程序请求。 WAF 排除列表允许从 WAF 评估中省略特定请求属性。 其余请求的计算结果为正常。
例如,Microsoft Entra ID 提供用于身份验证的令牌。 当这些令牌在请求标头中使用时,它们可能包含触发一条或多条 WAF 规则误报检测的特殊字符。 可以将标头添加到排除列表,该列表指示 WAF 忽略标头。 WAF 仍会检查请求的其余部分是否包含可疑内容。
排除范围
可以在以下范围内创建排除项:
- 规则集:这些排除项适用于规则集中的所有规则。
- 规则组:这些排除项适用于规则集中特定类别的所有规则。 例如,可以配置适用于所有 SQL 注入规则的排除项。
- 规则:这些排除项适用于单个规则。
小窍门
尽量使排除范围具体且窄小,以避免无意中留下让攻击者利用系统的空子。 如果需要添加排除规则,请尽可能使用按规则设置的排除项。
排除选择器
排除选择器标识排除应用到的请求部分。 WAF 将忽略其在请求指定部分中发现的任何检测结果。 可以在单个排除项中指定多个排除选择器。
每个排除选择器指定匹配变量、运算符和选择器。 单个排除中的多个匹配项被视为“OR”语句。
匹配变量
将以下请求属性添加到排除项:
- 请求标头名称
- 请求 Cookie 名称
- 查询字符串参数名称
- 请求体 POST 参数名称
- 请求正文 JSON 参数名称 (DRS 2.0 或更高版本支持)
使用的字段的值不会根据 WAF 规则进行评估,但会评估它们的名称。 排除列表禁止检查字段的值。 不过,字段名称仍会被求值。 有关详细信息,请参阅 “排除其他请求属性”。
运营商
指定要匹配的确切请求标头、正文、Cookie 或查询字符串属性。 或者可选地指定部分匹配项。 以下运算符可用于匹配条件:
-
等于:匹配与指定选择器值完全匹配的所有请求字段。 例如,若要选择名为 bearerToken 的标头,请使用
Equals将选择器设置为 bearerToken 的运算符。 - 开头为:匹配所有以指定的选择器值开头的请求字段。
- 结尾为:匹配以指定选择器值结尾的所有请求字段。
- 包含:匹配所有包含指定的选择器值的请求字段。
-
等于任意值:匹配所有请求字段。 使用
Equals any运算符时,选择器值将自动设置为*。 例如,使用Equals any运算符配置适用于所有请求标头的排除项。
事例敏感性
标头和 Cookie 名称不区分大小写。 查询字符串、POST 参数和 JSON 参数区分大小写。
正文内容检查
某些托管规则会在将请求体解析为 POST 参数或 JSON 参数之前,检查其中的原始负载内容。 因此,在某些情况下,你可能会看到值为matchVariableNameInitialBodyContents或DecodedInitialBodyContents的日志条目。
例如,假设创建一个排除项,其中包含匹配变量 Request body POST args 和一个选择器来标识和忽略命名的 FOOPOST 参数。 您将不再看到任何 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 |
| 查询参数值: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 诊断。