主动推送脚本一直返回 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。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。

作者 9823189