背景
发布服务中 /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
背景
发布服务中
/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
/api/file/getFileon the publish service #16603disabledInPublishto the plugin to indicate whether it is disabled in the publish service #16600