My-Header: 1=1
标头 (1=1
) 的值可能会被 WAF 检测为攻击。 但是,如果知道这是方案的合法值,则可以为标头的值配置排除项。 为此,请使用 RequestHeaderValues 匹配变量、运算符 contains 和选择器 (My-Header
)。 此配置停止对标头 My-Header
的所有值的评估。
按键和值请求属性仅在 CRS 3.2 或更新版本和 Bot Manager 1.0 或更新版本中可用。
按名称请求属性与按值请求属性的工作方式相同,包含此功能是为了向后兼容 CRS 3.1 和更低版本。 建议按值使用请求属性,而不是按名称使用属性。 例如,使用 RequestHeaderValues 而不是 RequestHeaderNames。
相反,如果 WAF 将标头的名称 (My-Header
) 检测为攻击,则可以使用 RequestHeaderKeys 请求属性为标头键配置排除项。 RequestHeaderKeys 属性仅在 CRS 3.2 或更新版本和 Bot Manager 1.0 或更新版本中可用。
请求属性示例
下表显示了如何构造给定匹配变量的排除项的一些示例。
要排除的属性
matchVariable
selectorMatchOperator
示例选择器
排除的内容
标头:{"Cookie": "/etc/passwdtest=hello1", "Cookie": ".htaccess=test1"}
/etc/passwdtest
和 .htaccess
Cookie
RequestCookieNames
标头:{"Cookie": "arg1=/etc/passwd"}
/etc/passwd
Cookie
RequestCookieNames
EqualsAny
标头:{"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"}
/etc/passwd
和 .cshrc
Cookie
RequestCookieValues
标头:{"Cookie": "arg1=/etc/passwd"}
/etc/passwd
Cookie
RequestCookieValues
EqualsAny
标头:{"Cookie": "arg1=/etc/passwd", "Cookie": "arg1=.cshrc"}
/etc/passwd
和 .cshrc
基于规则的排除项
可以为特定规则、规则组或规则集配置排除项。 必须指定应用排除的规则。 还需要指定应从 WAF 评估中排除的请求属性。 要排除完整的规则组,只需提供 ruleGroupName
参数,rules
参数仅在希望将排除限制为组的特定规则时有用。
使用 OWASP (CRS) 规则集版本 3.2 或更高版本或者 Bot Manager 规则集版本 1.0 或更高版本时,可以使用按规则排除。
假设你希望 WAF 忽略 User-Agent
请求标头的值。 User-Agent
请求标头包含特征性字符,网络协议对等方可以通过这些字符了解请求软件用户代理的应用程序类型、操作系统、软件供应商或软件版本。 有关详细信息,请参阅 User-Agent。
在许多情况下,需要禁用对此标头进行评估的功能。 WAF 可能会将检测到的某个字符串定性为恶意字符串。 例如,User-Agent
标头可能在字符串中包含经典的 SQL 注入攻击 x=x
。 在某些情况下,这可能是合法的流量。 因此,可能需要将此标头从 WAF 评估中排除。
可以使用以下方法从所有 SQL 注入规则的评估中排除 User-Agent
标头:
Azure 门户
Azure PowerShell
Azure CLI
Bicep
ARM 模板
$ruleGroupEntry = New-AzApplicationGatewayFirewallPolicyExclusionManagedRuleGroup `
-RuleGroupName 'REQUEST-942-APPLICATION-ATTACK-SQLI'
$exclusionManagedRuleSet = New-AzApplicationGatewayFirewallPolicyExclusionManagedRuleSet `
-RuleSetType 'OWASP' `
-RuleSetVersion '3.2' `
-RuleGroup $ruleGroupEntry
$exclusionEntry = New-AzApplicationGatewayFirewallPolicyExclusion `
-MatchVariable "RequestHeaderValues" `
-SelectorMatchOperator 'Equals' `
-Selector 'User-Agent' `
-ExclusionManagedRuleSet $exclusionManagedRuleSet
$wafPolicy = Get-AzApplicationGatewayFirewallPolicy `
-Name $wafPolicyName `
-ResourceGroupName $resourceGroupName
$wafPolicy.ManagedRules[0].Exclusions.Add($exclusionEntry)
$wafPolicy | Set-AzApplicationGatewayFirewallPolicy
az network application-gateway waf-policy managed-rule exclusion rule-set add \
--resource-group $resourceGroupName \
--policy-name $wafPolicyName \
--type OWASP \
--version 3.2 \
--group-name 'REQUEST-942-APPLICATION-ATTACK-SQLI' \
--match-variable 'RequestHeaderValues' \
--match-operator 'Equals' \
--selector 'User-Agent'
resource wafPolicy 'Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies@2021-08-01' = {
name: wafPolicyName
location: location
properties: {
managedRules: {
managedRuleSets: [
ruleSetType: 'OWASP'
ruleSetVersion: '3.2'
exclusions: [
matchVariable: 'RequestHeaderValues'
selectorMatchOperator: 'Equals'
selector: 'User-Agent'
exclusionManagedRuleSets: [
ruleSetType: 'OWASP'
ruleSetVersion: '3.2'
ruleGroups: [
ruleGroupName: 'REQUEST-942-APPLICATION-ATTACK-SQLI'
rules: [
ruleId: '942150'
ruleId: '942410'
"type": "Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies",
"apiVersion": "2021-08-01",
"name": "[parameters('wafPolicyName')]",
"location": "[parameters('location')]",
"properties": {
"managedRules": {
"managedRuleSets": [
"ruleSetType": "OWASP",
"ruleSetVersion": "3.2"
"exclusions": [
"matchVariable": "RequestHeaderValues",
"selectorMatchOperator": "Equals",
"selector": "User-Agent",
"exclusionManagedRuleSets": [
"ruleSetType": "OWASP",
"ruleSetVersion": "3.2",
"ruleGroups": [
"ruleGroupName": "REQUEST-942-APPLICATION-ATTACK-SQLI",
"rules": [
"ruleId": "942150"
"ruleId": "942410"
-Rule '942270'
$ruleGroupEntry = New-AzApplicationGatewayFirewallPolicyExclusionManagedRuleGroup `
-RuleGroupName 'REQUEST-942-APPLICATION-ATTACK-SQLI' `
-Rule $ruleEntry
$exclusionManagedRuleSet = New-AzApplicationGatewayFirewallPolicyExclusionManagedRuleSet `
-RuleSetType 'OWASP' `
-RuleSetVersion '3.2' `
-RuleGroup $ruleGroupEntry
$exclusionEntry = New-AzApplicationGatewayFirewallPolicyExclusion `
-MatchVariable "RequestHeaderValues" `
-SelectorMatchOperator 'Equals' `
-Selector 'User-Agent' `
-ExclusionManagedRuleSet $exclusionManagedRuleSet
$wafPolicy = Get-AzApplicationGatewayFirewallPolicy `
-Name $wafPolicyName `
-ResourceGroupName $resourceGroupName
$wafPolicy.ManagedRules[0].Exclusions.Add($exclusionEntry)
$wafPolicy | Set-AzApplicationGatewayFirewallPolicy
az network application-gateway waf-policy managed-rule exclusion rule-set add \
--resource-group $resourceGroupName \
--policy-name $wafPolicyName \
--type OWASP \
--version 3.2 \
--group-name 'REQUEST-942-APPLICATION-ATTACK-SQLI' \
--rule-ids 942270 \
--match-variable 'RequestHeaderValues' \
--match-operator 'Equals' \
--selector 'User-Agent'
resource wafPolicy 'Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies@2021-08-01' = {
name: wafPolicyName
location: location
properties: {
managedRules: {
managedRuleSets: [
ruleSetType: 'OWASP'
ruleSetVersion: '3.2'
exclusions: [
matchVariable: 'RequestHeaderValues'
selectorMatchOperator: 'Equals'
selector: 'User-Agent'
exclusionManagedRuleSets: [
ruleSetType: 'OWASP'
ruleSetVersion: '3.2'
ruleGroups: [
ruleGroupName: 'REQUEST-942-APPLICATION-ATTACK-SQLI'
rules: [
ruleId: '942270'
"type": "Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies",
"apiVersion": "2021-08-01",
"name": "[parameters('wafPolicyName')]",
"location": "[parameters('location')]",
"properties": {
"managedRules": {
"managedRuleSets": [
"ruleSetType": "OWASP",
"ruleSetVersion": "3.2"
"exclusions": [
"matchVariable": "RequestHeaderValues",
"selectorMatchOperator": "Equals",
"selector": "User-Agent",
"exclusionManagedRuleSets": [
"ruleSetType": "OWASP",
"ruleSetVersion": "3.2",
"ruleGroups": [
"ruleGroupName": "REQUEST-942-APPLICATION-ATTACK-SQLI",
"rules": [
"ruleId": "942270"
全局排除项
可以配置排除项以应用于所有 WAF 规则。
假设你要排除通过 URL 在请求中传递的 user 参数中的值。 例如,假设在你的环境中,user
查询字符串参数常常包含某个字符串,而 WAF 会将该字符串视为恶意内容并将其阻止。 可以排除名称以单词 user
开头的所有查询字符串参数,以便 WAF 不会评估字段的值。
以下示例演示如何从评估中排除 user
查询字符串参数:
Azure 门户
Azure PowerShell
Azure CLI
Bicep
ARM 模板
$exclusion = New-AzApplicationGatewayFirewallExclusionConfig `
-MatchVariable 'RequestArgNames' `
-SelectorMatchOperator 'StartsWith' `
-Selector 'user'
az network application-gateway waf-policy managed-rule exclusion add \
--resource-group $resourceGroupName \
--policy-name $wafPolicyName \
--match-variable 'RequestArgNames' \
--selector-match-operator 'StartsWith' \
--selector 'user'
resource wafPolicy 'Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies@2021-08-01' = {
name: wafPolicyName
location: location
properties: {
managedRules: {
managedRuleSets: [
ruleSetType: 'OWASP'
ruleSetVersion: '3.2'
exclusions: [
matchVariable: 'RequestArgNames'
selectorMatchOperator: 'StartsWith'
selector: 'user'
"type": "Microsoft.Network/ApplicationGatewayWebApplicationFirewallPolicies",
"apiVersion": "2021-08-01",
"name": "[parameters('wafPolicyName')]",
"location": "[parameters('location')]",
"properties": {
"managedRules": {
"managedRuleSets": [
"ruleSetType": "OWASP",
"ruleSetVersion": "3.2"
"exclusions": [
"matchVariable": "RequestArgNames",
"selectorMatchOperator": "StartsWith",
"selector": "user"
因此,如果 WAF 扫描 URL http://www.contoso.com/?user%3c%3e=joe
,它不会评估字符串 joe,但仍会评估参数名称 user%3c%3e。
配置 WAF 设置后,可以了解如何查看 WAF 日志。 有关详细信息,请参阅应用程序网关诊断。
详细了解 Azure 网络安全