事情本身不复杂,线索都在日志里。站内搜索只要输入带引号或 and 的词,页面直接返回 403,用户投诉搜不到东西,日志里这类请求被 WAF 规则 942100 拦下,连蜘蛛抓搜索页也一起挡了。

把日志和配置对完,能解释这个现象的基本就这几处。WAF 的 SQL 注入规则对查询参数做了宽匹配,没区分业务参数。还有一种是搜索接口把用户输入原样拼进 SQL,触发规则命中的同时确实存在风险。

少数情况下是白名单只放行了后台 IP,前台搜索没有例外。

复现被拦的请求看规则编号

curl -s -o /dev/null -w '%{http_code}\n' 'https://www.example.com/search?q=test%27'

随后改参数化查询消除注入面

grep -rn 'query_posts' wp-content/themes/yourtheme/search.php

给搜索路径加白名单并保留日志

ModSecurity: SecRuleRemoveById 942100

改完先别撤,确认这几项。规则调整后带引号的查询能正常返回结果,日志里 403 从每天两百条降到个位数,蜘蛛抓取恢复。

补一句。先修代码再放规则,只放行不修代码等于把注入面留给真正的攻击者。这类问题最好一次改到位,反复小改反而容易把原因搅混。

作者 9823189