一般业务经过WAF访问有400的原因为请求头较多时,与WAF不兼容导致。
建议按照以下方法逐步排查:
1.排查请求头过大
目前WAF头部最大支持16K,可以与用户协调获取相关的payload排查,如果小于16K,可以排除头部过大导致的400。
2.排查key是否异常
排查pyload的字段是否存在特殊符号,用户提供postman截图,没有特殊符号,如 :“.”“_”等。
3.本地复现问题排查
通过WAF之后会携带一些请求头,判断也许是这些请求头加上去之后导致的业务异常。
a.获取请求头
我们测试环境可以看到请求头:因为用户使用postman测试,所以我们不增加acw_tc这个cookie。
b.绑定host带上请求头访问源站
host绑定源站,增加请求头,直接用curl 或者visual-studio rest测试,复现了该问题,确认WAF请求头影响这个结果.
c.删除一些请求头测试
看影响结果的请求头,经过测试 ,发现请求头增加多于14个就会报错,反馈给用户,用户对源站进行调整,换掉了原来的IP,再测试结果OK
根据以上方法确认,基本上可以确认问题原因。