一、 现象:为什么我的图片传不上去?

很多小伙伴在 1Panel 中部署好 Halo 2.x 后,兴冲冲地去发文章,结果一上传图片就弹出蓝色的盾牌页面,提示: “请求携带恶意参数,已被拦截”

这通常是 1Panel 自带的 WAF(网站防火墙) 太过严格导致的。它误把图片上传的数据包当成了黑客的攻击代码(如 XSS 或 SQL 注入),直接回绝了你的请求(403 错误)。

1Panel WAF 拦截界面提示请求携带恶意参数已拦截 403 错误

二、 避坑:新旧版本 API 路径大不同

很多网上的旧教程会让你放行 /api/v1/assets,所以操作了之后依旧提示拦截,然后回到日志查看拦截的内容。

1Panel 部署 Halo 2 - 二、 避坑:新旧版本 API 路径大不同 - 1panel waf intercept log xss halo

但在 Halo 2.x 中,这个路径已经变了。如果你加了没效果,看看下面的对比:

比较项目

旧版 (Halo 1.x)

新版 (Halo 2.x)

上传接口

/api/v1/assets

/apis/console.api.storage.halo.run/v1alpha1/attachments/-/upload

发文接口

/api/v1/posts

/apis/api.console.halo.run/v1alpha1/posts

拦截特征

简单参数拦截

深度 XSS 语义检测拦截

1Panel 部署 Halo 2 - 二、 避坑:新旧版本 API 路径大不同 - halo 1x old api white list invalid

结论: Halo 2.x 的路径更长、更复杂,使用传统的固定路径白名单已经很难完全覆盖。

三、 终极方案:使用“正则模式”白名单

为了不再被频繁拦截,我们推荐在 1Panel 中使用正则表达式来一次性放行所有管理接口。

第一步:精准设置 URL 白名单

  1. 登录 1Panel,进入 网站 -> WAF -> 网站设置

  2. 点击你网站对应的 规则配置 ,找到 URL 白名单

  3. 直接添加这条正则规则:

^/apis/(.*)
(这条规则的意思是:只要是以 /apis/ 开头的请求,WAF 通通放行。这涵盖了上传、发文、改设置等所有核心操作。)

^/apis/console.api.storage.halo.run/v1alpha1/attachments/(.*)

(这里我添加的这条,如果还是频繁拦截请使用第一条)

1Panel 部署 Halo 2 - 第一步:精准设置 URL 白名单 - 1panel waf url whitelist regex halo 2

第二步:调整语义检测(这个留作备用)

即便加了白名单,有些超长博文(含大量代码)仍可能被拦截。

  1. 在同一配置界面中,找到 “XSS 语义检测”

  2. 将其开关设置为 关闭

    • 理由 :Halo 作为一个成熟的博客程序,自带安全过滤机制。关闭 WAF 端的这一项检测,可以极大地提升写作体验,避免误报。

四、 总结

解决 403 拦截的核心逻辑就是:用正则路径覆盖新版 API,关闭过度敏感的语义检测。