在使用宝塔面板的免费防火墙(通常是“宝塔网站防火墙”或“Nginx防火墙”)时,提交文章被拦截是一个常见问题。这通常是因为防火墙的规则将你的提交行为误判为潜在的攻击(如SQL注入、XSS跨站脚本等),从而进行了拦截。
以下是常见原因和解决方法:
🔍 一、常见原因
-
POST内容包含敏感关键词
比如:<script>、union select、insert into、onerror=等,这些会被防火墙识别为XSS或SQL注入尝试。 -
表单提交内容过长或结构复杂
某些富文本编辑器(如UEditor、TinyMCE)生成的HTML代码可能包含大量标签或特殊字符,触发规则。 -
防火墙规则过于严格(默认规则较激进)
宝塔免费版防火墙使用的是默认的通用规则集,可能对正常行为误判。 -
未添加白名单规则
提交文章的URL路径未被放行。
✅ 二、解决方法
方法1:查看拦截日志定位问题
- 登录宝塔面板
- 进入「安全」→「网站防火墙」
- 点击「拦截日志」
- 找到你提交文章时的记录,查看:
- 被拦截的URL
- 拦截原因(如:POST内容包含XSS)
- 具体触发的规则ID
👉 示例:如果日志显示 POST内容包含<script>,说明你提交的内容里有脚本标签。
方法2:临时关闭防火墙测试
- 在「网站防火墙」中,暂时关闭该站点的防火墙。
- 尝试重新提交文章。
- 如果成功 → 确认是防火墙问题
- 如果仍失败 → 可能是程序或权限问题
⚠️ 注意:测试后记得重新开启防火墙,避免安全风险。
方法3:添加白名单规则
如果确认是误拦截,可以添加白名单:
- 进入「网站防火墙」→「白名单」
- 添加规则:
- 规则类型:POST请求
- URL匹配:填写你提交文章的接口路径,如
/admin/article/save或/index.php?s=/admin/article/post - 操作:选择“不检测POST内容”或“放行该URL”
✅ 示例:
URL:/admin/article/save
规则:不检测POST参数
方法4:修改或关闭特定规则(高级)
- 在「拦截日志」中找到触发的规则ID(如:1001、1023)
- 进入「规则管理」→ 找到对应规则 → 点击「禁用」
- 常见高误报规则:XSS检测、SQL注入检测
- 建议只禁用特定规则,不要全部关闭
方法5:前端处理敏感内容(推荐长期方案)
- 如果使用富文本编辑器,确保内容经过HTML转义或过滤后再提交。
- 或在提交前对特殊字符进行编码(如
<→<)。 - 使用后端框架的防护机制(如ThinkPHP、Laravel的CSRF和XSS过滤)。
🛠 三、其他建议
- 升级到「宝塔专业防火墙」(收费版),规则更智能,支持AI识别,误报率更低。
- 使用第三方WAF(如Cloudflare、腾讯云WAF)替代或配合使用。
- 定期更新宝塔和防火墙插件,修复已知问题。
📌 总结
| 问题 | 解决方案 |
|---|---|
| 提交被拦截 | 查看拦截日志 |
| 包含HTML/JS代码 | 添加白名单或过滤内容 |
| 富文本编辑器提交失败 | 白名单放行提交接口 |
| 规则太严格 | 禁用特定规则或升级专业版 |
如果你能提供具体的:
- 拦截日志截图
- 提交的URL路径
- 使用的程序(如WordPress、ThinkPHP、Typecho等)
我可以帮你更精准地配置白名单规则。
CDNK博客