主动推送脚本一直返回 403,请求是 POST 到推送接口,WAF 日志里能看到被规则 942100 拦下,GET 访问同一路径正常。
一开始怀疑是「请求没有带正确的 Content-Type」,查了一圈,方向不对。
原因不止一个,得分开看。WAF 把带 .xml 或推送路径的 POST 当成上传行为直接拦。另一种情况是推送地址和站点地图地址写混了。
不容易想到的是,WAF 对该路径只允许 GET。
先确认推送地址和状态码
curl -s -o /dev/null -w '%{http_code}\n' -X POST 'https://www.example.com/urls?site=www.example.com&token=abc'
接着在 WAF 里放行该路径的 POST
SecRuleRemoveById 942100
补上请求类型后重新推送
curl -H 'Content-Type: text/plain' --data-binary @urls.txt 'https://www.example.com/urls?site=www.example.com&token=abc'
末了核对返回体里的成功条数
curl -s -H 'Content-Type: text/plain' --data-binary @urls.txt 'https://www.example.com/urls?site=www.example.com&token=abc'
报错是间歇性的,我蹲守了半小时才抓到一次完整现场。
白天有业务在跑,能验证的部分都压到了晚上做。
改完先别撤,确认这几项。推送恢复 200 且返回体里的成功条数与提交条数一致,WAF 日志不再有拦截记录。
补一句。推送和站点地图是两条通道,地址写混时先看请求路径,再怀疑 WAF。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
