问题描述

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中内容的检查, 如文档<Azure 应用程序网关的 Web 应用程序防火墙排除列表 - Azure 门户 | Azure Docs>中所描述的一样。

参考资料

如何快速定位应用程序网关 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

【Azure 应用服务】App Servie网站报403 ModSecurity Action错误的更多相关文章

  1. github 提交报403 forbidden的错误解决

    github 提交报403 forbidden的错误解决 $ git push error: The requested URL returned error: 403 Forbidden while ...

  2. 【Azure 应用服务】备份网站时由于文件太大了,导致应用服务备份失败。如何解决?

    问题描述 备份网站时由于文件太大了,导致应用服务备份失败.如何解决呢? 问题分析 App Service (应用服务)的备份功能有10GB大小的限制,超过了是无法备份成功的并且该限制是无法扩大的.查看 ...

  3. IIS发布网站 报错500.19 错误解决过程记录

    首先先报上我的环境 WindowsServer 2012 IIS 8.5 网站是FrameWork 4.0 发布网站后浏览,报错信息如下: 解决过程记录如下: 1.看到这个问题首先想到的是权限问题,设 ...

  4. 【Azure 应用服务】App Service中,为Java应用配置自定义错误页面,禁用DELETE, PUT方法

    问题定义 使用Azure应用服务(App Service),部署Java应用,使用Tomcat容器,如何自定义错误页面呢?同时禁用DELETE, PUT方法 解决办法 如何自定义错误页面呢?需要在 J ...

  5. 【应用服务 App Service】快速获取DUMP文件(App Service for Windows(.NET/.NET Core))

    问题情形 当应用在Azure 应用服务App Service中运行时,有时候出现CPU,Memory很高,但是没有明显的5XX错误和异常日志,有时就是有异常但是也不能明确的指出具体的代码错误.当面临这 ...

  6. MVC3在IIS7.5发布(部署)报403.14错误的解决办法

    MVC3在IIS7.5发布(部署)报403.14错误的解决办法     错误现象: 报403.14 forbidden错误 web服务器被配置为不列出此目录的内容. 解决办法: 检查站点的处理程序映射 ...

  7. Django中ajax发送post请求,报403错误CSRF验证失败解决办法

    今天学习Django框架,用ajax向后台发送post请求,直接报了403错误,说CSRF验证失败:先前用模板的话都是在里面加一个 {% csrf_token %} 就直接搞定了CSRF的问题了:很显 ...

  8. 【Azure 应用服务】探索在Azure上设置禁止任何人访问App Service的默认域名(Default URL)

    问题描述 总所周知,Azure App Service服务会默认提供一个 ***.chinacloudsites.cn为后缀的域名,但是该域名由上海蓝云网络科技有限公司备案,仅用于向其客户提供 Azu ...

  9. 【Azure 应用服务】App Service 开启了私有终结点(Private Endpoint)模式后,如何来实现公网Git部署呢?

    问题描述 因为中国区的App Service对外(公网访问)需要进行ICP备案,所以很多情况下,Web应用部署到App Service后,都是通过Application Gateway(应用程序网关) ...

  10. 【转载】访问IIS中网站出现 403.14 - Forbidden报错信息

    将网站发布后部署到IIS后,配置完应用程序池以及相关设置项后,在浏览器中访问设置好的网站,出现403.14 - Forbidden的错误信息,从错误信息的提示来看,应该是IIS服务器此网站目录的内容被 ...

随机推荐

  1. Nginx 系列 | (转)Nginx 上传文件:client_max_body_size 、client_body_buffer_size

    原文:http://php-note.com/article/detail/488 client_max_body_size client_max_body_size 默认 1M,表示 客户端请求服务 ...

  2. vue报错:'XX' is defined but never used no-unused-vars

    参考地址:http://www.gold404.cn/info/87 导致这个报错的原因就是eslint校验, 就是你当初在vue创建脚手架的时候选择了eslint校验: 后面你绝对会碰到这样的报错, ...

  3. Go基础之指针

    Go语言中的指针 目录 Go语言中的指针 一.Go语言中的指针介绍 1.1 指针介绍 1.2 基本语法 1.3 声明和初始化 1.4 Go 指针的3个重要概念 1.4.1 指针地址(Pointer A ...

  4. Unity2019及Unity2020打包android的环境配置

    2019安卓打包只有gradle模式了,因为谷歌把adt删了 unity2019可以自定义gradle模板,国内请把repo地址改成阿里云的源 unity2019打apk配置 引擎版本:unity20 ...

  5. 1.6 编写双管道ShellCode

    本文将介绍如何将CMD绑定到双向管道上,这是一种常用的黑客反弹技巧,可以让用户在命令行界面下与其他程序进行交互,我们将从创建管道.启动进程.传输数据等方面对这个功能进行详细讲解.此外,本文还将通过使用 ...

  6. LyScript 寻找ROP漏洞指令片段

    ROP绕过片段简单科普一下,你可以理解成一个可以关闭系统自身内存保护的一段机器指令,这段代码需要我们自己构造,这就涉及到在对端内存搜寻这样的指令,LyScript插件增强了指令片段的查找功能,但需要我 ...

  7. pywin32 实现寻找窗体并模拟按键

    import win32api import win32gui, win32con import win32clipboard import re import time class cWindow: ...

  8. Java多线程-ThreadLocal(六)

    为了提高CPU的利用率,工程师们创造了多线程.但是线程们说:要有光!(为了减少线程创建(T1启动)和销毁(T3切换)的时间),于是工程师们又接着创造了线程池ThreadPool.就这样就可以了吗?-- ...

  9. 深入浅出Java多线程(四):线程状态

    引言 大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第四篇内容:线程状态.大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在现代软件开发中,多线程编程已经成为提升 ...

  10. ubuntu16.04编译安装nginx1.24.0

    环境: Distributor ID: Ubuntu Description: Ubuntu 16.04.7 LTS Release: 16.04 Codename: xenial 安装包: pcre ...