问题描述

App Service 部署应用程序,然后通过App Gateway(WAF) 提供公网访问,但是一直遇见403报错,刷新页面,回退,重新Web页面能缓解403问题。

 

问题分析

通过浏览器F12抓取网络日志(Network Trace)来定位403返回的情况,发现请求返回的Status为 403 ModSecurity Action。

 

搜索“403 ModSecurity Action“关键字,发现它于WAF设置的拦截有关。引用文档:https://docs.azure.cn/zh-cn/articles/azure-operations-guide/application-gateway/aog-application-gateway-qa-waf-invalid-block

如果请求返回的 HTTP Code 是 403,并且 Response Header 是 HTTP/1.1 403 ModSecurity Action,则代表这个请求被 WAF 阻挡。

所以接下来就是查看WAF的日志,查看请求为什么会触发WAF的阻挡规则呢?

 

WAF的日志类似如下:

{

"instanceId": "ApplicationGatewayRole_IN_***",

"clientIp": "***.***.***.***",

"clientPort": "0",

"requestUri": "/",

"ruleSetType": "OWASP",

"ruleSetVersion": "3.0",

"ruleId": "529404",

"ruleGroup": "XXXXXXXXXXXXX",

"message": "SQL Hex Encoding Identified",

"action": "Matched",

"site": "Global",

"details": {

"message": "Warning. Pattern match \"(?i:(?:\\\\A|[^\\\\d])0x[a-f\\\\d]{3,}[a-f\\\\d]*)+\" at REQUEST_COOKIES:.AspNet.Cookies ....",

"data": "Matched Data: q0Xf53 found within REQUEST_COOKIES:.AspNet.Cookies: ****************** ...",

"file": "*********************",

"line": "850"

},

"hostname": "*********.com.cn",

"transactionId": "97033337381714991745"

}

深入分析日志,可以发现其中包含ClientIP,WAF中配置的RuleId,及具体配置的Message。

 

问题解决

根据配置消息里面的 AspNet.Cookies 内容,推断主要根源就是AspNet.Cookies这个cookie中的内容命中了WAF规则。解决办法有二:

一:通过禁用相关规则Disable掉,但这样也同时失去了该规则对所有请求的防护。

二:可以设置WAF排除对AspNet.Cookies中内容的检查, 如文档中所描述的一样。

 

参考资料

如何快速定位应用程序网关 WAF 功能拦截问题 : https://docs.azure.cn/zh-cn/articles/azure-operations-guide/application-gateway/aog-application-gateway-qa-waf-invalid-block

Web 应用程序防火墙排除列表 : https://docs.azure.cn/zh-cn/web-application-firewall/ag/application-gateway-waf-configuration?tabs=portal#waf-exclusion-lists

WAF exclusion Rule for cookie name : https://learn.microsoft.com/en-us/answers/questions/404390/waf-exclusion-rule-for-cookie-name

 

查看原文