记录一下那天晚上的排查过程。编辑在后台保存带图的文章时一直提示 403,请求是 multipart/form-data,同一条内容去掉图片就能保存,前台因此两周没有更新,蜘蛛抓到的还是旧正文。

刚开始盯着「WAF 只看 Content-Type 不解析分段,误判成注入」,折腾了半个多小时,排掉了。

原因不止一个,得分开看。WAF 规则把 multipart 里的 boundary 判成异常字符。还有一种是上传体积超过规则阈值,请求被整包丢弃。

另外,后台保存接口没有加白名单,和前台共用一套规则。

第一件事是用 curl 复现一次带文件的保存请求

curl -s -o /dev/null -w '%{http_code}\n' -X POST https://www.example.com/wp-admin/post.php -F 'action=editpost' -F 'post_ID=1024' -F 'file=@cover.jpg'

随后在 WAF 日志里定位命中的规则 ID

grep 'multipart' /var/log/waf/audit.log | tail -20

为后台接口加路径白名单

location ^~ /wp-admin/ { modsecurity_rules 'SecRuleEngine Off'; }

等前面都确认过,再确认保存成功后前台正文已更新

curl -s https://www.example.com/post/1024 | grep -c '新插入的段落'

别只看报错消失,验证要多做一步。后台带图保存返回 302 并成功跳转,前台正文出现新内容,抓取日志里当天就有重抓记录。

WAF 对 multipart 的误判很常见,后台路径单独放行比全局放松规则安全得多。报错文案容易误导,真正的原因往往在相邻那一层的日志里。

作者 9823189