如何防范伪造Content-Type绕过Azure App Gateway WAF规则的攻击?
解决方案说明
针对该WAF绕过场景,可分别在Azure应用网关WAF v2层、APIM/API侧实现拦截,优先在WAF层处置,结合上层校验实现纵深防御:
一、WAF层拦截方案(优先选择)
- 针对仅支持JSON格式的API接口,直接配置WAF自定义规则做Content-Type强制校验:
匹配所有发往目标API路径的POST请求,若Content-Type请求头的值不为application/json,直接触发拦截返回403,从根源避免篡改Content-Type的绕过行为。
自定义规则逻辑参考:匹配条件: 1. 请求方法 = POST 2. 请求URI 匹配目标API路径规则 3. 请求头 Content-Type 不等于 application/json 动作:拦截 - 若存在同时支持XML、JSON格式的API,可开启WAF多载荷解析能力:
在WAF策略的OWASP CRS规则配置中,开启对application/xml类型请求的JSON格式扫描能力,WAF会尝试对请求体做多格式解析,只要匹配到JSON恶意特征,无论Content-Type声明为何种类型,都会触发拦截。 - 补充自定义正则规则兜底:
新增规则匹配Content-Type为application/xml、但请求体存在明确JSON特征(如以{/[开头、包含JSON键值对格式)的请求,直接拦截,规则参考:匹配条件: 1. 请求方法 = POST 2. 请求头 Content-Type 包含 application/xml 3. 请求体 匹配正则 ^\s*[{[] 动作:拦截
二、APIM/API侧补充校验(纵深防御必备)
- 在APIM入站策略中新增Content-Type校验逻辑,针对每个API声明支持的请求格式做校验,仅允许符合要求的Content-Type请求进入转发流程,不符合的请求直接返回400错误,无需转发到后端。
- 针对Content-Type声明为XML的请求,新增格式校验逻辑:若请求体无法正常解析为XML格式,直接拒绝请求,彻底避免Content-Type与实际载荷不匹配的问题。
- 后端API本身保留载荷格式校验能力,作为最后一道防御线,不依赖上游WAF的拦截结果。
注意:若开启WAF多格式解析能力,需提前做充分的灰度测试,避免误拦截合法XML请求中包含JSON片段的场景。
内容的提问来源于stack exchange,提问作者Tanmoy Sengupta
相关产品推荐
相关产品推荐

