正在加载...
1883 字
9 分钟
[开源] 初春图床 v3.5.6 安全大更新:修复 Host 注入漏洞、合并社区 PR(R2 独立存储 / 图库文件夹)、完成全面安全审计~
2026-10-12

初春图床 v3.5.6 更新来了!这次是一个含金量很高的版本:在 v3.5.5 基础上合并了社区大佬 @hicocos 的 PR #32,并完成了一次覆盖 6 大子系统的全面安全审计与修复(3 High / 4 Medium / 10 Low),构建产物也全部改为 UPX -9 压缩的静态二进制。

⚠️ 特别提醒:本次发布之前的所有版本(含 v3.5.5 / v4.5.5 及更早)都受一个 Host 头注入漏洞影响,建议所有旧版本立即更新!

⚠️ 安全通告:Host / X-Forwarded-Host 注入#

未认证接口(如 GET /api/images/random)返回的图片 URL 基址,此前完全取自请求的 Host / X-Forwarded-Host / X-Forwarded-Proto 头。攻击者无需任何凭据,即可让服务端在响应中输出指向任意主机的图片链接:

Terminal window
curl -H 'X-Forwarded-Host: evil.example.com' 'http://your-host/api/images/random?limit=1'
→ {"url":"http://evil.example.com/uploads/2026/08/xxx.webp"}

在存在缓存 / 反向代理的部署中,可造成缓存投毒与外链劫持。

修复(随 PR #32 合入,本版本已包含):图片 URL 基址现在只取服务端配置的 APP_URL,不再信任任何请求头;APP_URL 未配置或非法时返回相对路径。升级后请务必在 .env 中将 APP_URL 设为实际访问地址。

暂时无法升级的缓解措施:

  • 反向代理固定 Host(如 nginx proxy_set_header Host example.com;),并剥离客户端传入的 X-Forwarded-Host / X-Forwarded-Proto;
  • 同时不要缓存未认证的 API 响应。

来自社区 PR #32:R2 独立存储、图库文件夹与权限管理#

[新增] Cloudflare R2 独立存储与传输优化

  • 将 Cloudflare R2 作为独立存储类型,与通用 S3 存储分别配置和管理,提供 R2 专用的端点及 CDN 配置。
  • 优化上传链路:支持浏览器直传、服务端校验与后台处理、任务状态恢复,以及直传失败时的中转回退。
  • 优化访问与下载链路:保留稳定图片外链,在适用场景下跳转至 R2 临时签名链接或配置的 CDN,减少图床服务器转发图片的流量;需要解密或动态水印的图片仍由服务端处理。

[新增] 图库逻辑文件夹

  • 新增账号隔离的逻辑文件夹,支持创建、描述、重命名、筛选和批量移动,不改变图片实际存储路径或外链。
  • 上传页以文件夹选择替换标签区;保留已有标签数据及相关接口。
  • 将「我的图库」和管理员「总图库」分开:个人列表强制按当前账号查询,总图库使用管理员接口并显示上传者。
  • 目录式列表、面包屑、搜索排序、列表/网格切换,以及移动端布局优化。
  • 删除文件夹默认保留图片;可选连带删除,需输入完整名称确认。大批量删除分批处理,失败保留记录并支持重试。
  • 文件夹关联贯穿普通上传、URL 上传及 R2 直传流程。

[优化] 存储与权限管理

  • 存储管理顶部提供紧凑的「角色存储配置」弹窗,管理员、普通用户、游客均可多选存储源。
  • 区分角色统一分配与个人额外授权,上传接口及直传任务重新校验有效存储权限。
  • 用户管理拆分存储授权和功能权限操作,分别保存、读取确认,避免覆盖另一类授权。
  • 修正空授权数组被显示为「0 个存储/0 个权限」的问题,区分默认可用能力、额外授权和超管权限。
  • 整理存储驱动、同步、删除与容量核算逻辑,保留失败清理记录。

[优化] 认证、稳定性与构建

  • 整理 Cookie 会话、游客身份恢复、API 凭据权限、外部登录、会话管理和登录记录。
  • 完善上传内容校验、请求边界、来源检查及错误响应;SVG 不再作为普通图片接受上传。
  • 图库列表不再等待上传配置等辅助请求;加载中、失败和真实空结果分别展示。
  • 拆分较大的 Go 控制器/服务与 Vue 页面组件;更新依赖、通用 Dockerfile 和构建上下文忽略规则。

安全审计修复(v3.5.6 新增)#

对合并后的 v3.5.5 基线代码进行了 6 个子系统的专项安全审计(认证会话 / 访问控制 / 加密配置 / SSRF 网络 / 上传管线 / 文件存储),修复全部 High 与 Medium 问题:

  • [High] 权限提升链修复:multi_storage_sync 模式下更新用户权限时,超管/自身保护被整体旁路,持委托权限码的用户可给自己添加全部权限码。现权限码修改无条件执行保护。
  • [High] SSRF 修复:/api/buckets 与 /api/buckets/test 原先无权限码,任意登录用户可令服务器探测内网。现需要 storage 权限码。
  • [High] 配置密钥强度校验:显式设置的 CONFIG_SECRET 现强制 ≥32 字符。
  • [Medium] CORS / CSP 收紧:localhost 放行仅限 APP_URL 本身为 localhost;CSP script/connect/frame-src 收敛为白名单。
  • [Medium] Telegram 通知修复:原先使用加密密文直接调用 API 导致通知必然失败,现正确解密后发送。
  • [Medium] 上传 DoS 防护:慢速请求体不再能无限占用全局上传槽(60s 空闲中断 + 15 分钟兜底释放 + 直传回退纳入槽约束)。
  • [Low] ×10:登录时序账号枚举抹平、修改密码接口独立限流、{random} 改用加密随机数、{filename} 消毒防目录注入、剥离 bidi 欺骗字符、Windows 盘符路径解析修复、URL 上传标签预检、响应体超限显式报错、WebDAV 禁跟随重定向等。

完整审计报告见仓库内 AUDIT_REPORT_v3.5.5.md(审计对象为 v3.5.5 基线,修复随 v3.5.6 发布)。

兼容性与升级注意事项#

  1. 新增文件夹、角色存储策略、上传任务及认证相关模型/字段,启动时自动迁移;升级前建议保留数据库备份。
  2. 没有角色自定义分配时保持原有存储行为,不自动更改账号额外授权,也不会自动开启游客模式;显式保存空选择不会自动退回默认存储。
  3. 单存储模式的多选表示允许用户选择其中一个上传;多存储模式保留本机主副本并使用远端同步目标。
  4. 收回存储权限会影响未完成上传任务的后续处理;已发布图片不会因为修改角色分配而被迁移或删除。
  5. 身份验证及游客恢复机制有所调整,旧会话可能需要重新登录;旧游客指纹不能作为认领图片的凭据。
  6. 新安装未指定管理员密码时,会生成随机初始密码文件 data/.initial_admin_password;已有账号密码不重置。
  7. Docker 构建使用 Node 22、pnpm 10.17.1、Go 1.26 和 Alpine 3.23。

下载与部署#

产物说明
oneImg_Win_amd64_v3.5.6.zipWindows amd64(含 README,UPX -9)
oneImg_Linux_amd64_v3.5.6.tar.gzLinux amd64 静态二进制(UPX -9)
oneImg_Linux_arm64_v3.5.6.tar.gzLinux arm64 静态二进制(UPX -9)
oneImg_Docker_amd64_v3.5.6.tarDocker 镜像,docker load 导入后标签 oneimg:v3.5.6-amd64
oneImg_Docker_arm64_v3.5.6.tarDocker 镜像,docker load 导入后标签 oneimg:v3.5.6-arm64
  • 全部二进制为静态链接(webp / sqlite3 由 cgo 内嵌编译),无运行时依赖,UPX -9 压缩后约 16-17MB。
  • Docker 镜像 runtime 层与官方 Dockerfile 一致(alpine:3.23 + ca-certificates + tzdata)。
  • 部署提醒:.env 中 DEFAULT_PASS 务必修改或留空(留空时首启生成随机密码写入 data/.initial_admin_password);APP_URL 需设为实际访问地址。

项目地址#

项目地址:

onexru
/
oneimg
Waiting for api.github.com...
00K
0K
0K
Waiting...
[开源] 初春图床 v3.5.6 安全大更新:修复 Host 注入漏洞、合并社区 PR(R2 独立存储 / 图库文件夹)、完成全面安全审计~
https://www.tr0.cn/oneimg_v356/
作者
小森
发布于
2026-10-12
许可协议
CC BY-NC-SA 4.0