运维类文章正文里有「../../etc/passwd」这样的示例字符串,页面一上线就返回 403,同一篇文章把示例删掉就正常,服务器日志里 WAF 记的是路径穿越攻击。

真正麻烦的地方在于,几个原因的现象几乎一样。WAF 对请求体和响应体都做了穿越特征匹配;文章内容经过 URL 编码后特征仍然命中;规则没有区分 GET 参数和正文展示场景;命中后直接返回 403 而不是仅记录。

复现并确认命中的是响应体还是参数

curl -s -o /dev/null -w '%{http_code}\n' 'https://www.example.com/post/1024'

然后查看 WAF 日志里的匹配字段

grep 'passwd' /var/log/waf/audit.log | tail -5

随后把该条规则改成只检测参数并记录

SecRule ARGS "@rx \.\./" "id:9002,phase:2,log,pass"

等前面都确认过,再重新访问确认页面正常返回

curl -s https://www.example.com/post/1024 | grep -c 'etc/passwd'

恢复的判定其实很直接。文章页恢复 200 且示例文字完整展示,WAF 日志里这条只记录不拦截,蜘蛛能重新抓到正文。

补一句。技术站的内容天然带攻击特征,规则要分字段生效,响应体一律拦截会把正常文章挡在门外。同一份配置在测试环境跑通,不代表线上没事,两边的默认值经常不一样。

作者 9823189