Azure应用网关WAF自定义规则无法拦截PHP请求的问题求助
问题:Azure应用网关WAF自定义规则未拦截PHP扫描请求
背景
我在WebAPI、FunctionApp(均基于.NET6+开发)前端部署了带有WAF的Azure应用网关,近期发现日志中存在大量针对PHP文件的请求,疑似漏洞扫描脚本。通过以下YAML流水线脚本添加了WAF自定义拦截规则:
- task: AzureCLI@2 displayName: Add application gateway WAF policy custom rule inputs: azureSubscription: 'MySub' scriptType: 'pscore' scriptLocation: 'inlineScript' inlineScript: > az network application-gateway waf-policy custom-rule create --name BlockPhpExtension -g MyRg --policy-name AGDefault-wafpol --action Block --priority 10 --rule-type MatchRule - task: AzureCLI@2 displayName: Add application gateway WAF policy custom rule match-condition inputs: azureSubscription: 'MySub' scriptType: 'pscore' scriptLocation: 'inlineScript' inlineScript: > az network application-gateway waf-policy custom-rule match-condition add --resource-group MyRg --policy-name AGDefault-wafpol --name BlockPhpExtension --match-variables RequestUri --operator EndsWith --values .php --transform lowercase
规则在Azure门户显示配置正确,但创建16小时后,应用日志仍出现4小时内的PHP请求,需排查问题原因并解决。
可能原因及解决方法
1. 规则优先级冲突
- 原因:若存在优先级更高(数值更小)的自定义规则或托管规则允许了此类请求,会覆盖你的拦截规则。
- 解决方法:
- 列出所有自定义规则确认优先级顺序:
az network application-gateway waf-policy custom-rule list --resource-group MyRg --policy-name AGDefault-wafpol --output table - 确保
BlockPhpExtension(优先级10)是同类型匹配规则中优先级最高的,调整冲突规则的优先级或删除允许类规则。
- 列出所有自定义规则确认优先级顺序:
2. 请求URI匹配逻辑存在漏洞
- 原因:扫描请求可能不是以
.php直接结尾,例如带查询参数(/test.php?param=1)、带斜杠后缀(/test.php/),此时EndsWith匹配会失效。 - 解决方法:
- 修改匹配条件为
Contains,覆盖更多场景:az network application-gateway waf-policy custom-rule match-condition update --resource-group MyRg --policy-name AGDefault-wafpol --name BlockPhpExtension --match-variables RequestUri --operator Contains --values .php --transform lowercase - 可选:添加额外匹配条件,比如针对
RequestUri的Path部分进行精准匹配,或覆盖.php/这类变种后缀。
- 修改匹配条件为
3. WAF策略未关联到应用网关
- 原因:自定义规则所在的WAF策略未绑定到目标应用网关,导致规则未生效。
- 解决方法:
- 检查当前绑定状态:
az network application-gateway show --resource-group MyRg --name YourAGName --query "wafPolicy" - 若未绑定,执行绑定命令:
az network application-gateway waf-policy assign --resource-group MyRg --gateway-name YourAGName --policy-name AGDefault-wafpol
- 检查当前绑定状态:
4. WAF规则生效延迟或缓存问题
- 原因:Azure WAF规则可能存在节点缓存延迟,部分边缘节点未及时同步新规则。
- 解决方法:
- 通过Azure门户重新保存WAF策略,或使用CLI重新应用策略触发同步;
- 查看WAF日志(Log Analytics的
AzureDiagnostics表),筛选RuleName_s == "BlockPhpExtension"确认规则是否被触发,若有触发记录则说明规则已生效,未拦截的请求可能是匹配逻辑未覆盖的场景。
5. 请求绕过WAF处理
- 原因:应用网关的路由规则配置错误,部分请求未经过WAF模块处理(例如路由设置为
Bypass WAF)。 - 解决方法:
- 检查所有指向后端应用的路由规则,确认关联的规则集已启用WAF;
- 验证侦听器与路由的绑定关系,确保所有流量都经过WAF策略处理。
内容的提问来源于stack exchange,提问作者Paul Meems
相关产品推荐
相关产品推荐

