Skip to content

Improve file access permissions in the publish service #18354

Description

@88250

背景

发布服务中 /api/file/getFile 的越权读取问题已在 #16603 中解决。当前对工作空间内部目录采用默认拒绝策略,但 public、挂件以及允许在发布服务中运行的插件仍需要受控的文件访问能力。

访问规则

  • data/public/* 始终允许读取。
  • data/widgets/* 始终允许读取。
  • 根据插件的启用状态及 disabledInPublish 决定是否允许读取 data/plugins/<name>/*data/storage/petal/<name>/*
  • 插件被禁用、卸载或禁止在发布服务中运行时,不允许访问对应的插件目录和存储目录。
  • /api/file/readDir 对插件相关目录采用相同规则,只允许枚举插件自己的目录。
  • /plugins/* 静态路由采用相同的插件发布状态判断,保持与 /api/file/getFile 的访问策略一致。

安全约束

  • 保持默认拒绝,未明确放行的路径均不可访问。
  • temp/conf/repo/history/ 等工作空间内部目录始终禁止访问。
  • 插件只能访问自身目录和自身存储目录,不能访问其他插件或任意工作空间文件。
  • 防止路径穿越、符号链接和编码绕过。
  • 不允许通过 /api/file/readDir 枚举放行范围之外的目录。

相关 Issue

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions