WordPress评论触发406 Not acceptable错误 求无需禁用Modsecurity的修复方案
WordPress提交评论返回406 Not Acceptable 非禁用ModSecurity修复方案
这个报错本质是ModSecurity的Web应用防火墙规则把正常的评论提交请求误判为恶意注入/跨站攻击了,完全不需要全局关闭ModSecurity牺牲安全性,按下面步骤操作就能修复:
第一步:定位具体误拦截的规则ID
不要上来就盲目改配置,先找到到底是哪条规则误杀:
- 如果你用的是可视化面板(宝塔、cPanel、DirectAdmin这类),直接找到面板里的ModSecurity(部分面板叫WAF防火墙)入口,打开拦截日志,筛选你提交评论对应时间点的拦截记录,日志里会明确写清楚触发的规则ID、拦截原因——常见误报场景是评论内容带了SQL关键词、外链片段、代码类字符,被规则判定为攻击。
- 如果是自己手动搭建的服务器环境,直接查ModSecurity审计日志,默认存储路径是
/var/log/modsec_audit.log,匹配对应访问时间的请求条目,就能拿到触发的规则ID。
第二步:定向配置规则白名单
拿到误报的规则ID之后,只针对评论提交接口做规则例外,其他路径的WAF防护完全不受影响,没有额外安全风险:
- WordPress默认的评论提交接口路径是
/wp-comments-post.php,我们只需要让触发误报的规则不对这个路径的请求生效即可。 - 用面板的用户直接在WAF白名单功能里填入查到的规则ID,生效路径指定为
/wp-comments-post.php,不要选全局生效。 - 手动配置服务器的用户,在ModSecurity规则配置文件里加入如下配置段,把示例里的
123456替换成你实际查到的误拦截规则ID即可,如果有多条误报规则,把ID都列进去:
<Location "/wp-comments-post.php"> SecRuleRemoveById 123456 </Location>
注意:不要直接删除整条WAF规则,也不要给整个WordPress站点加全局白名单,这两种操作和直接关闭ModSecurity的安全风险没有区别。
特殊情况排查
如果做完上面的操作还是报406:
- 检查你安装的WordPress插件,部分评论优化、安全防护类插件自带请求过滤逻辑,会和ModSecurity规则叠加触发拦截,逐个禁用相关插件测试定位,找到后调整插件的过滤阈值即可。
- 如果你用的是主机商提供的托管型ModSecurity/WAF(没有服务器/面板操作权限),直接把你查到的拦截记录发给主机商客服,要求他们针对评论提交路径做对应规则的白名单即可,不需要你自己调整配置。
内容的提问来源于stack exchange,提问作者Jessica_F
相关产品推荐
相关产品推荐

