事情本身不复杂,线索都在日志里。站内搜索只要输入带引号或 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 从每天两百条降到个位数,蜘蛛抓取恢复。
补一句。先修代码再放规则,只放行不修代码等于把注入面留给真正的攻击者。这类问题最好一次改到位,反复小改反而容易把原因搅混。
