WAF规则误封怎么排查,正常用户访问不被拦截
先把用户的描述变成线索
用户说打不开的时候,直接的描述往往不够用。要问清楚几件事:什么时候开始的、访问的是哪个地址、用的是浏览器还是接口调用、换一个网络之后是否还这样。有了这些信息,才能和日志对得上。
换网络这一点特别有用。同一个地址在手机流量下能打开、在公司网络下打不开,问题多半出在来源被拦;两个网络都不行,才更像是站点本身或者链路的问题。
用户提供的时间越准确,排查越快。可以提醒他们在大致时间上多留几分钟余量,因为日志时间、服务器时区和用户本地时间之间常有差别。
从日志里找到那条规则
拿到时间范围之后,在防护日志里按来源和时间筛选,看命中的是哪一类规则。多数情况下能看到具体是哪个参数、哪段内容触发了判断,这些细节决定了后面的处理方式。
有些命中看起来是误报,其实是请求本身不规范:表单里带了特殊字符、参数里放了很长的内容。这类情况可以把规则放宽一点,或者调整前端提交的内容。
如果是整段地址被拦,要看看规则的范围是不是写得太大。范围过宽是误封最常见的来源,尤其是在限制某个地区或者某类来源的时候。

放行的方式要选对
处理方式粗略分三种:给这个来源单独放行、把规则本身改宽、把规则关掉。前两种影响范围小,后一种风险最大,因为它会同时放过所有同类请求。
放行单个来源时,尽量写到具体地址或者单独的标识上,不要顺手放行整段。写过一次宽范围,后面很难再收回来,因为没人能确认它还有没有在用。
如果规则背后的场景已经不存在了,那就直接调整或者删除规则本身,而不是留着它再加一堆例外。规则和例外越堆越多,最后的判断逻辑没人看得懂。
从误报里改进
每次误封都值得留一条记录:什么原因、怎么处理、规则有没有跟着调整。积累几次之后,很容易看出某一类规则总是出问题,这时候该重新设计的是判断条件。
上线新规则时先只记录不拦截,观察一段时间再收紧,这个习惯能消掉大部分误报。多等几天,比事后应付一批用户反馈轻松。
另外,给用户留一条能反馈问题的入口。有反馈才能知道误封,沉默的用户不会告诉你,他们只是不再来了。
最后,别把误封当成纯粹的麻烦。它往往在提示规则与真实业务之间的差距,处理得当,防护的准确度就会往上走一个台阶。
减少误封的几条经验
规则上线前先在测试环境验证,用真实的表单和参数跑一遍,比照着文档配置更可靠。
把常见业务场景整理成几组样例:长文本提交、带特殊字符的搜索、批量导入的文件,这些是误报最集中的地方。
阈值不要一次定到最严。先宽松,遇到滥用再收紧,比从严开始、被投诉后再放宽要好过。
用户反馈的渠道要有人看,并且能在同一天内响应。拖到第二天,用户早就换了别的办法,问题也就没人再提。
误封处理完之后,回头看看有没有更合适的规则可以替代,而不是简单加一条例外。
把处理过的案例攒起来,偶尔翻一翻,会发现规则中的一些长期问题。
记录越详细越容易发现规律。哪些页面容易出问题、哪类用户受影响最多,这些都在提示规则本身该往哪个方向调整。
和开发同事对齐提交格式,从源头上减少触发规则的请求,效果往往比调规则好。
防护的目标是让正常用户顺利访问,记住这一点,取舍就不会太难。把这几件事变成固定的做法,误封的处理时间会明显缩短。

把典型误封案例整理成一份说明,新同事遇到类似情况能自己先判断一轮。
和业务方约定好反馈的方式,集中在固定的渠道里,比分散在各个群里容易被看到。
如果同一类请求经常被误拦,考虑在应用层面做调整,而不是持续在规则上打补丁。
处理过程中保留与用户的沟通记录,事后复盘的时候能看出哪些环节可以更快。
把这套流程跑顺之后,误封从发现问题到解决的时间通常会明显缩短。